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'})

我可以在两行中看到如何做到这一点

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

使用 has_many 关系给你的方法;

原文根据评论不正确

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

已更正

Category.find_by_name("my_category").posts

或者

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

前提是您category_id在 Post 模型上有一个专栏。

于 2012-04-20T09:35:47.783 回答
1

@blackbird07 对@John Beynon 答案的评论是正确的。

你应该试试

Category.find_by_name("my_category").posts

find_by 帮助器返回单个对象而不是数组。

于 2012-04-20T10:07:21.340 回答