Ruby on Rails - 为关联实例添加范围检查

时间:2017-01-19 05:14:12

标签: ruby-on-rails

在我的Rails 5.0应用程序中,我有两个实例,Group和Group_Item。

一个组可以有很多Group_Items我想知道为Group创建一个范围的最佳方法,它只选择具有Group_Items的Group。

Group.rb

  has_many :group_items

Group_Item.rb

  belongs_to :group

3 个答案:

答案 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

希望这会对你有所帮助