[英]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.