2011-06-07 44 views
1

我正在尝试在发票的类中编写一个已命名的作用域。发票对象有一个指向Job对象的链接。作业对象有一个公司对象的链接。Ruby on Rails中链接对象的Lambda条件

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}}} 

这是给我的,说

未定义的局部变量或方法'工作”的#Class错误:0x103239160

如何为此写入lambda函数?

注:我使用Ruby 1.8.7和Rails 2.3.5

+1

如果问题是关于Ruby on Rails的,将其标记为此类。 – 2011-06-07 03:36:53

+0

向我们展示相关的'belongs_to'和'has_xxx'。如果它是'has_many:jobs',那么用'jobs'替换'job'。 – Zabba 2011-06-07 03:46:07

+0

这个问题涉及到Ruby语言,这就是我最初将其标记为Ruby的原因。已更新为显示belongs_to。 – link664 2011-06-07 04:00:06

回答

3

一个named_scope基本上是一个类的方法,所以拉姆达内,自我的范围是发票。没有工作实例或局部变量,因此是错误。

但是,这应该工作:

named_scope :job_company, lambda{|job_company_id| { :joins => { :job => :company }, :conditions => ["jobs.company_id = ?", job_company_id] }} 
+0

在@ link664的例子中,不是自我'发票'的作用域而不是'作业'的范围? – theIV 2011-06-07 03:55:48

+0

是啊,是的。我读得太快了。编辑我的回复。 – 2011-06-07 03:59:33

+0

是的,自我的范围是发票。我试图使用命名范围来过滤发票对象,基于分配给分配给发票对象的Job对象的公司对象。 – link664 2011-06-07 04:01:09