Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails 3中查询属于关联的列的最有效方法是什么?_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails 在Rails 3中查询属于关联的列的最有效方法是什么?

Ruby on rails 在Rails 3中查询属于关联的列的最有效方法是什么?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,在Rails 3应用程序中,我试图查找父关联中的列等于某个特定字符串的记录。e、 例如,在category name=“my_category”的位置发布 Category包含一个name列,这是我可以运行搜索的唯一数据。因此,我无法直接根据类别id进行筛选 最有效的Rails-y方法是什么。我已经尝试了几个看起来应该有效的选项,但没有成功 Post.joins(:category).where('category.name'=>'my_category') Post.joins(:cat

在Rails 3应用程序中,我试图查找父关联中的列等于某个特定字符串的记录。e、 例如,在category name=“my_category”的位置发布

Category包含一个name列,这是我可以运行搜索的唯一数据。因此,我无法直接根据类别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)

但我想知道我是否忽略了一些轨道魔法?抱歉,如果这是一个noob问题,我还在学习

使用“有很多关系”给你的方法

根据评论,原件不正确

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

Category.find_by_name("my_category").posts


假设您在Post模型上有一个
category\u id
列。

使用has\u many关系提供给您的方法

Post.joins(:category).where( :categories => { :name => "my_category" } )
根据评论,原件不正确

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

Category.find_by_name("my_category").posts

如果您在Post模型上有一个
category\u id

Post.joins(:category).where( :categories => { :name => "my_category" } )
注意,参数
:categories
在WHERE部分是复数形式


请注意,参数
:categories
在WHERE部分是复数。

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

你应该试试

Category.find_by_name("my_category").posts

“由助手查找”返回的是单个对象而不是数组。

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

你应该试试

Category.find_by_name("my_category").posts

“按帮助查找”将返回单个对象而不是数组。

这将不起作用,因为
类别。其中
将不返回单个对象,而是返回条目数组。感谢更新。这仍然会导致两个SELECT语句-一个用于类别,另一个用于PostsHanks john!回答得真不错。我学到了一些新东西来整理我的代码。我已经给出了blackbird的答案,因为它的数据库交互最少。但是谢谢你的帮助!完全同意-对于最有效的查询,单个查询始终获胜。干得好,黑鸟!:)这不起作用,因为
Category.where
不会返回单个条目,而是返回一个条目数组。感谢您的更新。这仍然会导致两个SELECT语句-一个用于类别,另一个用于PostsHanks john!回答得真不错。我学到了一些新东西来整理我的代码。我已经给出了blackbird的答案,因为它的数据库交互最少。但是谢谢你的帮助!完全同意-对于最有效的查询,单个查询始终获胜。干得好,黑鸟!:)这将导致2个select语句,而不是1个-一个用于类别,一个用于帖子@edward,谢谢。我学到了一些新东西。我已经将答案授予了blackbird,因为它只是一个数据库调用。但是谢谢你的帮助,有一个好分数。这将导致2个选择语句,而不是1-一个用于类别,一个用于帖子@edward,谢谢。我学到了一些新东西。我已经将答案授予了blackbird,因为它只是一个数据库调用。谢谢你的帮助,祝你进步。谢谢@blackbird07!正是我想要的,一个数据库调用。我是如此接近,只是需要多元化的类别。这些复杂的活动记录查询总是让我感到困惑。我总是觉得无论我是否得到了正确的语法,它都是一次又一次的尝试,一次又一次的错误。你有什么经验法则或有用的参考资料可以帮助我吗?再次感谢!是的,我也感到疼痛。最后我总是查阅rails指南和API文档。在后者中搜索“joins”,你会发现一个例子:school和:schoolstanks@blackbird07!正是我想要的,一个数据库调用。我是如此接近,只是需要多元化的类别。这些复杂的活动记录查询总是让我感到困惑。我总是觉得无论我是否得到了正确的语法,它都是一次又一次的尝试,一次又一次的错误。你有什么经验法则或有用的参考资料可以帮助我吗?再次感谢!是的,我也感到疼痛。最后我总是查阅rails指南和API文档。在后者中搜索“join”,您将找到一个示例:school和:schools