has_manyするとき、新しい順に取り出すようにorder指定することはよくありますよね。
class User
has_many :articles, :order => ‘updated_at DESC’
end
これで、@user.articles.first
などとやれば最新記事が取得できます。
ところで、何かの都合で別の基準(たとえば古い順やタイトル順)で並び替えたい場合はどうしたらいいでしょうか?
@user.articles.order(‘updated_at ASC’)
#=> ORDER BY `updated_at` DESC, `updated_at` ASC
@user.articles.order(‘name ASC’)
#=> ORDER BY `updated_at` DESC, `name` ASC
これではダメですね。
困ったときのStackOverflow!!
@user.articles.reorder('updated_at ASC')
めでたしめでたし。
追記: reorder()
はdeprecatedなのでexcept(:order).order()
の方が良いらしいです