Ruby on rails RubyonRails:嵌套命名作用域
有没有办法将不同模型中的命名作用域相互嵌套 例如:Ruby on rails RubyonRails:嵌套命名作用域,ruby-on-rails,activerecord,include,nested,named-scope,Ruby On Rails,Activerecord,Include,Nested,Named Scope,有没有办法将不同模型中的命名作用域相互嵌套 例如: 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
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
有没有什么好方法可以让我找到一家公司,同时也包括员工和配偶:公司。有员工。有配偶。查找(1)
或者我有必要在公司中定义另一个命名的范围:
:与员工和配偶一起,:include=>{:employees=>:party}
在这个人为设计的示例中,这并不算太糟糕,但嵌套在我的应用程序中要深入得多,如果我不必添加非干性代码来重新定义嵌套的每个级别上的包含,我希望这样做。您需要随时定义所有条件。但是您可以定义一些方法来组合一些命名的\u范围
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]
试试这个
Company.with_employees.merge( Employees.with_spouse)
据我所知,rails3 finders在过滤器链接方面有所改进。在您的with_employees_with_Amployee方法中,您使用子模型的with_Amployee与_employees链接在一起。这是有意的,因为这是我正在寻找的方法。是的,我的例子不是很好,但没有真正好的方法:(我建议不要使用默认范围。在需要时很难回避,而且它比您想象的更频繁。我会将其细化为仅使用默认范围进行排序,而从不使用它来细化或限制查询返回的记录。)。