ActiveRecord根据条件中具有值的关联记录查找条件

时间:2011-06-09 04:03:44

标签: sql activerecord has-many-through

使用以下Rails模型:

class Group < ActiveRecord::Base
  has_many    :group_locations, :dependent => :restrict
  has_many    :locations, :through => :group_locations, :dependent => :restrict
end

class Location < ActiveRecord::Base
  has_many        :group_locations, :dependent => :destroy
  has_many        :groups, :through => :group_locations
end

class GroupLocation < ActiveRecord::Base
  belongs_to  :group
  belongs_to  :location
end

我正在尝试 查找 与字符串“group_list”中包含的多个组中至少一个相关联的所有位置(例如“1,2, 3,4,5" )。如果它是位置记录中的字段,我将在(#{group_list})* 中指定“ *字段”的条件。但是,如果我想要至少有一个位置的“group_location”,其中“group_id”在列表中(或者,一个“group”,其group_id在列表中),我该如何实现我的目标。

我知道如何使用纯SQL来实现它,但是你如何使用Rails呢?

1 个答案:

答案 0 :(得分:0)

@taro你是对的。通过添加代码

开始
joins(:group_locations).where("group_id in (?)", group_id_array)

然后我继续定义一个范围,以使它成为一个很好的包:

scope :locations_in_groups, lambda { |grparray| joins(:group_locations).where("group_id in (?)", grparray) }

感谢您的帮助。