2012-02-28 73 views
0

我有一个简单的模型:ActiveRecord的关联属性的查询方法

class Project < ActiveRecord::Base 
    belongs_to :user 

class User < ActiveRecord::Base 
    has_many :projects 

项目有几个属性,如:日期,:姓名,并为这些属性我有属性可供查询方法对我说:

project.date? 
project.name? 

但是我没有:

project.user? 

相反,我有:

project.user_id? 

瞥一眼代码显示这是因为实际的“属性”是user_id,这就是属性查询方法的目的?对于关系来说,查询方法也是这个想法的逻辑延伸。

常见的做法是什么?看来我们有一些粗略的等价物可供选择:

project.user.present? 
project.user.blank? 
project.user.nil? 

或者仅使用{relation}_id?方法和停止抱怨?

回答

1

为什么不自己定义一个项目方法来满足您期望的API?

class Project < ActiveRecord::Base 

    def user? 
    true if user.present? 
    end 
end 

我想在Ruby中的最佳实践,并坦言在所有的编程是明确指定的接口,如果你认为用户?是做这件事的最佳方式,那么我就说去做吧。

+0

当然,对于除了刚好基于关联的属性之外的所有属性,都可以看到生成的存在检查简短方法,这似乎很奇怪。如果AR自动处理所有这些,为什么区分? – 2012-02-29 15:33:15