2016-03-01 3 views
0

У меня есть следующие ассоциации:Scope на has_many,: через отношения с массивом идентификаторов

#models/contact.rb 
class Contact < ActiveRecord::Base 
    has_many :relationships 
    has_many :locations, through :relationships 
end 

#models/relationship.rb 
class Relationship < ActiveRecord::Base 
    belongs_to :contact 
    belongs_to :location 
end 

#models/location.rb 
class Location < ActiveRecord::Base 
    has_many :relationships 
    has_many :contacts, through: :relationships 
end 

То, что я хочу сделать, это создать область, которая находит все contacts, связанные с массивом location идентификаторов.

Я попытался использовать этот сфера, но он не работал. Он присоединяется к таблицам правильно, но массив, с которым я сталкиваюсь, вызывает некоторые проблемы. Что-то кажется неправильным в моем синтаксисе в предложении where.

#models/Contact.rb 
class Contact < ActiveRecord::Base 
    ... 
    scope :by_locations, ->(ids_ary){joins(relationships: :location).where("locations.id IN ?", ids_ary)} 
end 
+0

ли это 'scope' в коде или 'scoop'? – nik

+0

@nik это 'scope', у меня была опечатка. – Neil

ответ

1

В дополнение к другим ответам, вы также можете переписать запрос, чтобы использовать хэш вместо:

scope :by_locations, ->(ids_ary) { joins(relationships: :location).where("locations.id" => ids_ary) } 
+0

Спасибо! Синтаксис хэша все еще меня достает. – Neil

0

необходимо добавить скобки вокруг знака вопроса:

scope :by_locations, ->(ids_ary){joins(relationships: :location).where("locations.id IN (?)", ids_ary)} 
Смежные вопросы