簡體   English   中英

Ruby on Rails:嵌套命名作用域

[英]Ruby on Rails: Nested named scopes

有什么方法可以將命名作用域嵌套在不同模型中?

例:

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)
還是我有必要在Company中定義另一個named_scope:
:with_employees_and_spouse, :include => {:employees => :spouse}

在這個人為的示例中,還算不錯,但是嵌套在我的應用程序中更深入了,如果我不必添加un-DRY代碼來在嵌套的每個級別重新定義包含,我都希望這樣做。

您可以使用默認范圍

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]

嘗試這個

Company.with_employees.merge( Employees.with_spouse)

您需要始終定義所有條件。 但是您可以定義一些方法來組合一些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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM