カテゴリのリストがあります。アイテムには位置があり、カテゴリにはhas_many:items、:order => "position"の関係があります。ユーザーがポジション値を更新すると、そのポジションが表示されます。私の位置は、丸められた数字間を移動できる浮動小数点です。rails - 保存後の関連付けを更新する方法
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
上記は機能しますが、実際は冗長です。アイテムの保存時に、カテゴリの関係を変更する必要があるため、注文を変更することができるため、更新する必要があります。
検索からこの回答に引き続き(私がやったように)誰が:この動作はもはやレールによってサポートされていません。非推奨の警告が表示されます。コレクションの新しい方法は、コレクションプロキシで 'reload'メソッドを使うことです。 – klaustopher
@klaustopherありがとう。私の答えを更新しました。 –
"DEPRECATION警告:アソシエーションを強制的に再ロードするための引数を渡すことは廃止され、Rails 5.1では削除されます(代わりにから呼び出されます:2)" –
Dorian