我正在尝试在Invoice的类中编写命名范围。发票对象具有指向Job对象的链接。作业对象具有指向Company对象的链接。
class Invoice < ActiveRecord::Base
belongs_to :job
class Job < ActiveRecord::Base
belongs_to :company
我希望范围取决于与Job相关的公司ID是否与传入的值相匹配。
我正在尝试这样的事情
named_scope :job_company, lambda{|job_company_id| {:conditions => {job.company.id => job_company_id}}}
这给我一个错误,说
未定义的局部变量或#Class的方法`job':0x103239160
如何为此编写lambda函数?
注意:我使用Ruby 1.8.7和Rails 2.3.5
答案 0 :(得分:3)
named_scope基本上只是一个类方法,所以在lambda中,self的范围是Invoice。没有作业实例或局部变量,因此出错。
但是,这应该有效:
named_scope :job_company, lambda{|job_company_id| { :joins => { :job => :company }, :conditions => ["jobs.company_id = ?", job_company_id] }}