2015-06-25 2 views
0

Допустим, мы имеем вложенную установить, гдеRails Nested Eager Loading?

class Foo 
    belongs_to :object 
    has_many :bar 
end 

class Bar 
    belongs_to :foo 
    has_one :abc 
end 

class Abc 
    belongs_to :bar 
end 

И я хочу нетерпеливого нагрузки abc от foo. Какой был бы лучший способ сделать это? В настоящее время это не похоже на работу:

object.foos(include: {bar: :abc}) 

Моя цель состоит в том, чтобы избежать такой код:

object.foos.any? do |f| 
    f.bar.abc.method_1 && f.bar.abc.method_2 && f.bar.abc.method_3 
end 

И перейти к более сухой код, как:

object.foos(rails_magic).any? do |x| 
    x.method_1 && x.method_2 && x.method_3 
end 
+0

который рельсы версия вы используете? – Swards

ответ

0

Потому что вы не может выполнять вложенную нетерпимую загрузку на что-либо, кроме класса, имеет смысл перестроить ваш запрос так:

Foo.includes(:object, :bar => :abc).where('object_id = ?', object.id).references(:object).each do |f| 
... 
end 

Этот запрос является загрузкой Object, а также с загрузкой ABC через свою собственную ассоциацию в Bar.