has_manyな関連にbuildした後にsortを実行したい
[Rails] has_many through な関連をチェックボックスで操作するときに苦労した話 | ハレノヒブログ
こちらのページを参考に、WordPressのカテゴリー選択UIみたいのを作りました。
が、これだと選択されたカテゴリが上に来てしまってソート順が無効になってしまうので、何とかする方法。
普通にsort!使えばいいじゃない
ということで下のようにやってみる。
article.categorizations.sort! { |a, b| a.category_id <=> b.category_id }
すると、sort!なんて無いといわれる。なぜだ。。。
has_manyなアソシエーションで取得できるcollectionはArrayではない
クラス名::ActiveRecord_Associations_CollectionProxyというクラスらしい。
そしてこのクラスはsort!を持っていない。
よく見たら、article.categorizations.targetにも同じデータが入っているように見える。
そしてこいつのクラスはArray。
なので、こうしたらうまくいった。
article.categorizations.target.sort! { |a, b| a.category_id <=> b.category_id }
targetをいじっていいのか迷ったが、公開されてるプロパティなので大丈夫なんだろう。。。