我有Movie
很多模型Photo
。default?
对于给定的电影,只能同时设置一张照片。
我想知道如何在 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。