0

たくさんMovieのモデルがありPhotoます。default?特定のムービーに同時に設定できる写真は1つだけです。

これを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に設定していることが原因である可能性がありますか?

この場合、データベースにすでに保存されているアイテムのみを反復処理するにはどうすればよいですか?新しい写真でtrueに設定する前に、otherpossibleをfalseに設定する必要があるため、ここでコールバックを使用after_saveすることはお勧めしません。default?

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 に答える