ActiveRecord Поиск с условием на основе связанной записи, имеющей значение в списке - PullRequest
0 голосов
/ 09 июня 2011

со следующими моделями 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" ). Если бы это было поле из записи Location, я бы указал условие "* field in (# {group_list}) *". Но как мне достичь своей цели, когда я хочу иметь хотя бы одну из «group_location» местоположения, чей «group_id» находится в списке (или, альтернативно, одну «группу», чей group_id находится в списке).

Я знаю, как это сделать с чистым SQL, но как вы это делаете с Rails?

1 Ответ

0 голосов
/ 26 июня 2011

@ таро Вы правы. Начал с добавления кода

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

Затем я приступил к определению области видимости просто для того, чтобы сделать ее красивым пакетом:

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

Спасибо за вашу помощь.

...