Там какой-либо путь состоит в том, чтобы вложить названные объемы друг в друге из различных моделей?
Пример:
class Company
has_many :employees
named_scope :with_employees, :include => :employees
end
class Employee
belongs_to :company
belongs_to :spouse
named_scope :with_spouse, :include => :spouse
end
class Spouse
has_one :employee
end
Есть ли любой хороший способ для меня найти компанию в то время как включая сотрудников и супругов как это:
Company.with_employees.with_spouse.find(1)
или это необходимый, чтобы я определил другой named_scope в Компании:
:with_employees_and_spouse, :include => {:employees => :spouse}
В этом изобретенном примере это не слишком плохо, но вложение намного глубже в моем приложении, и я хотел бы его, если бы я не должен был добавлять код неDRY, переопределяющий включение в каждый уровень вложения.
Вам нужно постоянно определять все ваши условия. Но вы можете определить метод для объединения некоторых named_scope
class Company
has_many :employees
named_scope :with_employees, :include => :employees
named_scope :limit, :lambda{|l| :limit => l }
def with_employees_with_spouse
with_employees.with_spouse
end
def with_employees_with_spouse_and_limit_by(limit)
with_employees_with_spouse.limit(limit)
end
end
class Employee
belongs_to :company
belongs_to :spouse
named_scope :with_spouse, :include => :spouse
end
class Spouse
has_one :employee
end
Вы можете использовать область действия по умолчанию
class Company
default_scope :include => :employees
has_many :employees
end
class Employee
default_scope :include => :spouse
belongs_to :company
belongs_to :spouse
end
class Spouse
has_one :employee
end
Тогда это должно сработать. Но я не тестировал.
Company.find(1) # includes => [:employee => :spouse]