0

我有Movie很多模型Photodefault?对于给定的电影,只能同时设置一张照片。

我想知道如何在 Rails 上实现它。我添加了以下代码,

before_save :check_if_default

def check_if_default
  self.movie.photos.where(default: true).update_all(default: false) if self.default?
end

但是通过查看控制台,它不会将新对象更新为真实状态。当尝试这样做时,它们仍然是错误的。

> a.photos.find(600).default = true
> a.photos.find(600).save
=> true 
a.photos.find(600).default
=> false

我想知道这是否可能是因为我正在迭代所有对象,包括当前未保存的当前对象并将其设置为 false?

如果是这种情况,我怎么能只迭代那些已经保存在数据库中的项目?我想after_save不建议在这里使用回调,因为我应该确保default?在将新照片设置为 true 之前将 other possible 设置为 false。

4

1 回答 1

1

您没有持久化您更新的实体。

尝试:

b = a.photos.find(600)
b.default = true
b.save

或者

a.photos.find(600).update_attributes! {default:true}

或者

于 2012-11-09T18:23:32.957 回答