1

Rails 3 アプリで、親関連付けの列が特定の文字列と等しいレコードを見つけようとしています。例: カテゴリ名 = "my_category" の投稿。

class Post
  belongs_to Category
end

class Category
  has_many Posts
end

カテゴリには名前列が含まれており、それが検索を実行するために使用できる唯一のデータです。したがって、category_id で直接フィルタリングすることはできません。

これを行うための最も効率的な Rails-y の方法は何ですか。機能するはずのオプションをいくつか試しましたが、機能しませんでした!.

Post.joins(:category).where('category.name'=>'my_category')
Post.joins(:category).where(:category=>{:name=>'my_category'})
Post.includes(:category).where('category.name'=>'my_category')
Post.includes(:categories).where('category.name'=>'my_category')
Post.includes(:category).where(:category=>{:name=>'my_category'})

これを2行で行う方法を見ることができます

category=Category.where(:name=>"my_category")
Post.where(:category_id=>category)

しかし、Rails マジックを見落としているのではないでしょうか? 初心者の質問で申し訳ありませんが、私はまだ学んでいます!

4

3 に答える 3

2
Post.joins(:category).where( :categories => { :name => "my_category" } )

引数:categoriesは WHERE 部分で複数形であることに注意してください。

于 2012-04-20T10:06:30.983 に答える
1

@JohnBeynonの答えに対する@blackbird07のコメントは正しいです。

試してみてください

Category.find_by_name("my_category").posts

find_byヘルパーは、配列ではなく単一のオブジェクトを返します。

于 2012-04-20T10:07:21.340 に答える
1

has_many 関係が提供するメソッドを使用します。

コメントごとに間違っているオリジナル

Category.where(:name => "my_category").posts

修正済み

Category.find_by_name("my_category").posts

また

Category.where(:name => "my_category").first.posts

category_idPost モデルに列がある場合。

于 2012-04-20T09:35:47.783 に答える