1

アソシエーションが存在する場合はアソシエーションフィールドで並べ替え、それ以外の場合はオブジェクト自体の属性で並べ替えるActiveRecordクエリを作成することはできますか?

例:Discussionオブジェクトがありますhas_many :comments。でソートされたディスカッションのリストを表示したいと思いdiscussion.latest_comment.created_atます。ただし、一部のディスカッションにはコメントがない場合があります。その場合は、discussion.created_at代わりにそれらの属性を使用します。

キャッチは、結果がActiveRecord::Relation(パフォーマンス上の理由と、Kaminari [Relationオブジェクトが必要]を使用しているため)である必要があるということです。

私が考えることができる唯一のことは、実際に新しいフィールドを作成することです。このフィールドdiscussion.latest_comment_atには、最初に入力されdiscussion.created_at、新しいコメントが投稿されるたびに更新されます。ただし、これはメンテナンスの観点からはそれほど単純ではないようです(たとえば、コメントが削除されるとどうなりますか?)。

4

1 に答える 1

1

SQLを使用してこれを行う方法がわからないため、騙して、トピックが作成されるたびにコードに属性を設定させlast_post_atます。

last_post_atそうすれば、一度に2つのテーブルをクエリするのではなく、トピックを並べ替えることができます。

他のフォーラムシステムもこのように機能しているのを見てきましたが、あなたが設計しているのはまさにフォーラムのようなシステムのようです。

于 2012-07-17T03:31:29.693 に答える