28

アイテムのリストがあるカテゴリがあります。アイテムには位置があり、カテゴリにはhas_many:items、:order=>"position"という関係があります。ユーザーが位置の値を更新するときに、その位置を確認したいと思います。私の位置は、丸められた数値間を移動できるようにするための浮動小数点です。

pos=item.category.items.map(&:id)
current_position=pos.index(id.to_i)
item.save # want to refresh the relationship here
pos_new=item.categoty.items.map(&:id)
# grabbing this since just accessing item isn't updated if positioning has changed
item_new=Item.find(id)
pos_new=item_new.category.items.map(&:id)
new_position=pos_new.index(id)
if current_position!=new_position
  is_moved=true # sent back in JSON to propagate a dynamic change.
end

上記は機能しますが、それは本当に冗長なようです。順序が変更される可能性があるため、カテゴリの関係を更新する必要があることをアイテム保存で通知する方法はありますか?

4

3 に答える 3

63

単一アイテムの関連付けの場合:

book.reload_author

他の協会の場合:

author.books.reload

http://guides.rubyonrails.org/association_basics.html#controlling-caching


Rails 5 より前の古いバージョンの Rails ではtrue、アソシエーション メソッドに最初のパラメータとして渡して reload: にすることができましたauthor.books(true)

于 2014-08-08T21:37:23.530 に答える
38

これを使用item.reloadしてデータベースからモデルを再フェッチし、次に関連付けを呼び出すと再フェッチされます。

于 2012-10-01T17:55:38.180 に答える