1

属性を持つBlogPostモデルがあり:categoryます。新しいBlogPostフォームを作成しています。選択メニューに、ユーザーが以前のレコードに入力した各カテゴリを入力したいと思います。

BlogPostsしたがって、1つのクエリですべてを検索しUser ID、入力した各カテゴリのリストを切り上げる必要があります。同じカテゴリが複数のレコードに存在しますが、もちろん、選択メニューにそのコピーを返したいだけです。

ありがとうございました :)

4

1 に答える 1

3

あなたは適切なユーザーSELECT DISTINCTに返さINNER JOINれたカテゴリをすることができます:

Category
  .joins( :posts )
  .where( posts: { user_id: current_user.id } )
  .uniq

これにより、次のようなクエリが送信されます。

SELECT DISTINCT categories.*
FROM categories
  INNER JOIN posts ON posts.category_id = categories.id
WHERE posts.user_id = [whatever]

編集注: aと。uniqの両方のメソッドであることに注意してください。配列にキャストする前に、必ずリレーションで呼び出してください。そうしないと、不明瞭な結果の配列に対してuniqを実行します。これも機能しますが、パフォーマンス的にはばかげています。RelationArray

于 2013-01-26T20:10:16.390 に答える