読者です 読者をやめる 読者になる 読者になる

ここにタイトルが入ります

デザイン&プログラミングのことも書くし、それ以外のことも書く。

【Rails】ActiveRecordのreplaceメソッド。

Rails

ActiveRecordのモデルでuserとitemが1対多の関係で存在したとする。
(has_manyとbelongs_toのアソシエーション)

この場合、userオブジェクト.itemsとすると、
ユーザーに紐づくアイテムすべてが取得できる。

このユーザーに紐づくアイテムをまるっと入れ替えたい時は、
userに紐付けたいitemオブジェクトの配列を
replaceメソッドで渡してあげる。

そうすると新しく加わったものはinsertされるし、
なくなったものはdeleteされる。


new_items = ユーザーに紐付けたいitemオブジェクトの配列

user = User.first
user.items.replace(new_items)

みたいな。


〜大変参考になりました!!〜
Railsの多対多で関連テーブルの操作色々


※上記リンクにもあるとおり、userと関連がなくなってしまったitemが削除されるわけではないので、関連がなくなった時にitemを削除するようにするにはuserモデルに

has_many :items, :dependent => :destroy

と設定しておきましょう。