我正在尝试在发票类中编写一个命名范围。发票对象有一个到作业对象的链接。工作对象有一个指向公司对象的链接。
class Invoice < ActiveRecord::Base
belongs_to :job
class Job < ActiveRecord::Base
belongs_to :company
我希望范围基于与工作相关的公司 ID 是否与传入的值匹配。
我正在尝试这样的事情
named_scope :job_company, lambda{|job_company_id| {:conditions => {job.company.id => job_company_id}}}
这给我一个错误,说
undefined local variable or method `job' for #Class:0x103239160
我该如何为此编写 lambda 函数?
注意:我正在使用 Ruby 1.8.7 和 Rails 2.3.5
最佳答案
named_scope 基本上只是一个类方法,所以在 lambda 内部,self 的范围是 Invoice。没有作业实例或局部变量,因此出现错误。
但是,这应该有效:
named_scope :job_company, lambda{|job_company_id| { :joins => { :job => :company }, :conditions => ["jobs.company_id = ?", job_company_id] }}
关于ruby-on-rails - Ruby on Rails 中链接对象的 Lambda 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6260323/