Ruby on Rails中链接对象的Lambda条件

时间:2011-06-07 03:28:57

标签: ruby-on-rails ruby lambda

我正在尝试在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

1 个答案:

答案 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] }}