私はあなたの結合を想像User
してUsers
台無しにすることができます。しかし、私の経験では、これは Rails ではうまく解決できないものです。名前を変更するだけではauthor
(読みやすさが向上し、意図をより適切に表現できますが)、同じ table を指しているため、役に立ちませんusers
。
レールで複数の結合を行う場合、条件を正しく表現するのは非常に困難です。Rails はその場でテーブルのエイリアスを作成しますが、残念ながら、私の条件ではこれらのエイリアスに対処する方法が見つかりません。
したがって、手作りのSQL(高速)に頼るか、レールを使用して、最初に投稿者名でソートされた投稿を取得してから、投稿ごとにタグ付けされたユーザーのリストを取得する必要があると思います(これは遅くなります) 、しかし純粋なルビー)。
最初に 2 番目のオプションを選択し、必要に応じて最初のオプションを最適化します。
[更新: スコープ定義を追加]
個人的には、私は賛成せずdefault_scope
、代わりに明示的なスコープを定義することを提案します
scope :with_authors_sorted, lambda {
Post.includes(:type).includes(:user).
order('year DESC, week DESC, users.display_name ASC, posts.created_at DESC')
}
これは、コントローラーで使用できます。
@posts = Post.with_authors_sorted
お役に立てれば。