美文网首页
Rails 无法保存/更新数据(对象)

Rails 无法保存/更新数据(对象)

作者: hjiangwen | 来源:发表于2017-03-15 18:03 被阅读283次

    上下文

    想更改对象的属性,update,save等方法却不生效。以下在命令行操作:

    > id = 6
    > v = Video.find(id)
    => #<Video id: 6, title: "宝藏", key: nil>
    > v.update(title: "随便打的标题")
       (0.2ms)  BEGIN
       (0.2ms)  ROLLBACK
     => false #这里应该就看出问题了
    > v
    => #<Video id: 6, title: "随便打的标题", key: nil>
    > v.reload
    => #<Video id: 6, title: "宝藏", key: nil>
    

    解决方法

    其实update和save方法会返回是否成功将对象保存到数据库,当返回false时,可以使用your_model.errors将错误打印出来。

    => #<ActiveModel::Errors:0x007fff34fab460 @base=#<Video id: 6, title: "宝藏", key: nil>, @messages={:key=>["can't be blank"]}>
    

    原来我在video模型创建后加了一条NOT NULL约束,导致这个之前创建的video对象现在无法在key为nil的情况下保存。

    class Video < ActiveRecord::Base
        validates :key, presence: true
    end
    

    也就是说我需要进行以下操作才能保存:

    > id = 6
    > v = Video.find(id)
    => #<Video id: 6, title: "宝藏", key: nil>
    > v.update(title: "随便打的标题", key: "sdfsdsds") #记得更新不能为nil的key属性
    (0.2ms)  BEGIN
      SQL (0.5ms)  UPDATE "videos" SET "key" = $2, "updated_at" = $3 WHERE "videos"."id" = $4  [["qiniu_key", "sdfsdsds"], ["updated_at", "2017-03-15 09:45:35.615265"], ["id", 6]]
       (4.6ms)  COMMIT
     => true # 返回true代表将对象保存到数据库
    

    相关文章

      网友评论

          本文标题:Rails 无法保存/更新数据(对象)

          本文链接:https://www.haomeiwen.com/subject/bnqrnttx.html