2017-08-21 6 views
0

投稿とコメントのモデルがあります 投稿has_many:commetns コメントbelongs_to:投稿 特定のユーザーからのコメント付きのすべての*投稿を取得したいと思います。Railsフィルタ関連のレコード

Post.all.includes(:comments).where('comments.post_id IS NULL OR comments.user_id = ?' id).references(:comments) 

それはフィルタ:私はのようなものを試してみました今の (私は(コメントなしでもこれらのもの)すべての単一のポストを取得し、特定のユーザーによって作成されたこれらのコメントをフィルタしたい)

私が欲しいものを投稿コメントは出ますが、場合にポストが除外以外のコメントが何を持っていない、それは

それとも

Post.all.joins('LEFT JOIN comments c ON c.post_id = posts.id AND c.user_id = ' + sanitize(id)) 
(明らかにそれはwhere句...によって拒否された)この記事を返しません

すべての投稿が返されますが、除外は機能しません。

+0

ご質問は今、非常に不明瞭であるRailsの関連付けをプリロードについての優れた記事を見つけることができます'Post'sが除外されると不平を言う。あなたの意図した結果は、特定のユーザからのコメントとコメントのないすべての 'Post's、または' Post'sと 'User'のコメントのみを含む' Post'sですか? – engineersmnky

+0

私はすべての投稿をしたい、私はコメントではなく、投稿をフィルタリングしたい。したがって、すべての投稿と特定のユーザからのコメント –

+0

これは、インスタンスレベルの詳細が含まれているため、単一のメソッドチェーンで実行できます。 (post.comments.user_id)は、一般にプリロードできないことを意味します。すべての投稿を読み込んだ後にすべてのユーザーのコメントを読み込み、コード内でこれを処理するほうが簡単かもしれません。 – engineersmnky

答えて

2

残念ながら、この問題の解決策はありません。

User.eager_load(:popular_comments) 

など、静的フィルタとの関連付けを事前にロードすることはできますが、動的フィルタでは機能しません。

今、それはあなたがすべての `Post`sをしたいし、その後comments.user_id``によってフィルタリングが、その後、あなたがあると言うので、あなたがここにhttp://blog.arkency.com/2013/12/rails4-preloading/

+0

よく、著者は「実行時に実行時にのみ応募したい協会の条件は正直に分かりませんが、あなたがそれを見つけたらコメントに教えてください」それはまさに私の場合です... –

関連する問題