Ruby on Rails:嵌套的命名范围

Wil*_*nes 8 activerecord named-scope nested ruby-on-rails include

有没有办法从不同的模型中将命名范围嵌套在彼此之内?

例:

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
Run Code Online (Sandbox Code Playgroud)

有没有什么好方法让我找到一家公司,同时包括这样的员工和配偶:
Company.with_employees.with_spouse.find(1)
或者我是否有必要在公司中定义另一个named_scope:
:with_employees_and_spouse, :include => {:employees => :spouse}

在这个人为的例子中,它并不是太糟糕,但嵌套在我的应用程序中要深得多,如果我不需要在嵌套的每个级别添加un-DRY代码重新定义include,我会喜欢它.

shi*_*ara 0

您需要始终定义所有条件。但是你可以定义一些方法来组合一些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
Run Code Online (Sandbox Code Playgroud)