Создайте область видимости Rails, сравнивая поля в двух таблицах
У меня есть несколько связанных таблиц в приложении
class Listing < ActiveRecord::Base
belongs_to :house
belongs_to :multiple_listing_service
end
class House < ActiveRecord::Base
has_one :zip_code
has_one :primary_mls, through: :zip_code
end
Я хотел создать область, которая производит все Листинги, которые связаны с Первичным MLS для связанного Дома. Другими словами, область действия должна создавать все листинги, в которых для связанного дома указан множественный_лист_сервис_идентификатор = primary_mls.id.
Я пробовал десятки областей вложенных объединений, но ни одна из них не работает. В лучшем случае они просто возвращают все листинги и обычно терпят неудачу.
Есть идеи?
1 ответ
Если я правильно понимаю, я не уверен, что чистая сфера будет подходить. Предполагая, что у вас есть:
class MultipleListingService < ActiveRecord::Base
has_many :listings
has_many :zip_codes
end
Я хотел бы пойти на что-то вроде:
class House < ActiveRecord::Base
...
def associated_listings
primary_mls.listings
end
end
Обновление 1
Если ваша цель состоит в том, чтобы просто получить первичный список, то я бы добавил is_primary
поле к Listing
, Это было бы наиболее эффективным. Альтернативой является соединение из трех таблиц, которое может работать, но его трудно оптимизировать:
class Listing < ActiveRecord::Base
...
scope :primary, -> { joins(:houses => [:zip_codes])
.where('zip_codes.multiple_listing_service_id = listings.multiple_listing_service_id') }