选择与其他记录无关的所有记录

时间:2014-08-19 21:06:18

标签: ruby-on-rails ruby-on-rails-4

我有两个表pagesmenu_itemspages有很多menu_itemsmenu_items belongs_to pages。在Rail 4中,如何仅选择与pages无关的menu_items

提前致谢!

2 个答案:

答案 0 :(得分:0)

也许Page.where是您正在寻找的。实际上,where方法通过Page数据库调用指定类型的所有对象。通过使用菜单ID等于nil的参数调用它,您将搜索没有菜单ID的所有页面。

理想情况下,您想致电Page.where(page.menu_items.empty?),但当然,这是不允许的。

环顾this question或多或少与你的完全相同。他们解决了这个问题:

Page.includes(:menu_items).where( :menu_items => {:page_id=>nil} )

答案 1 :(得分:0)

以下各项均应有效:

Page.includes(:menu_items).where( menu_items: { page_id: nil} )

Page.find(:all, conditions: { :menu_items.count: 0 } )

Page.where('id NOT IN (SELECT DISTINCT(page_id) FROM menu_items)')