2016-12-06 4 views
3

Надеюсь повсюду найти ответ.Рельсы 5 Динамические условия для has_many

has_one :region_location, ->(location) { where("region_locations.site_id = ?", location.current_site.id) if location.current_site } 

Этот код генерирует следующее исключение в моей среде разработки.

«Объем ассоциации„region_location“зависит экземпляр (The сфера блок принимает аргумент). Предзагрузка экземпляра зависимых областей не поддерживается.»

Похоже на то, что было возможно в Rails 4, но не в 5 (Rails has_many with dynamic conditions)? Любые предложения будут ценны. Я думал о том, чтобы сделать его методом экземпляра, но я также использую ассоциацию ниже.

has_one :region, :through => :region_location 

ответ

0

Вы могли бы просто сделать это методом экземпляра вместо этого. например

def region_location 
    RegionLocation.find_by_site_id(self.current_site.id) if self.current_site 
end 

и вторая часть может быть просто

delegate :region, to: :region_location, allow_nil: true 

Это должно решить эту проблему для вас при сохранении той же функциональности

+0

Спасибо. Кажется, это работает. Определенно замедляет работу, хотя, поскольку с sunspot solr я не могу сделать: включает больше с отношениями, определенными таким образом. –

+0

@BenScheib hmmm, что немного жестче. возможно, придется выкопать источник рельсов, чтобы найти решение – engineersmnky