1. ホーム
  2. ruby-on-rails

[解決済み] Railsでhas_manyリレーションシップを自動的にソートするには?

2022-11-04 17:49:20

質問

これは本当に簡単な質問のように思えますが、どこにも回答がありません。

もしあればrailsで。

class Article < ActiveRecord::Base 
  has_many :comments 
end 
class Comments < ActiveRecord::Base 
  belongs_to :article 
end

なんでこんなんでコメントの順番を決められないんだ。

@article.comments(:order=>"created_at DESC")

名前付きスコープは、何度も参照する必要がある場合に有効で、こんなことをする人だっています。

@article.comments.sort { |x,y| x.created_at <=> y.created_at }

しかし、何かもっとシンプルであるべきだと思うのです。 何が足りないのでしょうか?

どのように解決するのですか?

のオプションで、素のコレクションのソート順を指定することができます。 has_many 自体のオプションで指定できます。

class Article < ActiveRecord::Base 
  has_many :comments, :order => 'created_at DESC'
end 
class Comment < ActiveRecord::Base 
  belongs_to :article 
end

また、データベースを使わないシンプルな方法でソートを行いたい場合は sort_by :

article.comments.sort_by &:created_at

これをActiveRecordで追加された順序付けの方法で収集する。

article.comments.find(:all, :order => 'created_at DESC')
article.comments.all(:order => 'created_at DESC')

上記のソリューションのパフォーマンス特性は、最初にどのようにデータを取得するか、そしてどのRubyを使ってアプリを実行するかによって大きく変わりますので、ご希望に添えない場合があります。