2013-07-12 175 views
0

我有一个Step模型和一个Images模型;步骤与图像之间的关联是图像属于一个步骤,而步骤具有许多图像。我想查询哪些步骤返回具有多个图像的所有步骤。我将如何在轨道控制台中执行此操作?通过关联查询

我已经试过如下:

Step.where("images > ? ", 1) 
Step.joins(:images).where("image.count > 1") 

也不工作。

非常感谢!

回答

1

我可以给你从我的应用程序similiar查询,这样你就锻炼; Tibial你的大脑一点;)

Activity.joins(:slots).group('activities.id').having('COUNT(activity_id) > 1') 

好吧,你应该做的

Step(:images).group('steps.id').having('COUNT(images.step_id) > 1') 

这也正是我的例子,但与改变了模型名称。

+0

还可以阅读一些有关SQL和关系型数据库,因为我看到你设法在那里申请对象模型的逻辑。 –

+0

感谢您的帮助。我没有看到您的查询中如何使用插槽? – scientiffic

+0

啊,他们不是。固定。 –

0

也许这样的事情?:

Step.find(:all, 
      select: "steps.*, count(images.id) as image_count", 
      joins: :images, 
      having: "image_count > 1", 
      group => 'images.step_id') 

检查this explanation

+0

感谢您的帮助。我收到错误“column image_count does not exist”我也将示例代码的最后一行更改为group:'images.step_id' – scientiffic

+0

尝试删除select属性(或将你想要的列添加到字符串中)并使用'having:“count(images.id)> 1”' – NicoSantangelo