在我的Rails 5.0应用程序中,我有两个实例,Group和Group_Item。
一个组可以有很多Group_Items我想知道为Group创建一个范围的最佳方法,它只选择具有Group_Items的Group。
Group.rb
has_many :group_items
Group_Item.rb
belongs_to :group
答案 0 :(得分:1)
像
这样的东西class Group < ActiveRecord::Base
scope :groups_with_items, lambda { where("EXISTS (SELECT id FROM group_items WHERE group_items.group_id = groups.id)") }
end
答案 1 :(得分:1)
创建没有lambda的范围的另一种方法是(没有连接的更快):
scope :groups_with_items, where("EXISTS(SELECT 1 from group_items where groups.id = group_items.group_id)")
答案 2 :(得分:0)
你可以简单地这样做
class Group < ActiveRecord::Base
scope :groups_with_items, joins(:group_items)
end
希望这会对你有所帮助