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

2017-03-15  本文已影响283人  hjiangwen

上下文

想更改对象的属性,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代表将对象保存到数据库
上一篇 下一篇

猜你喜欢

热点阅读