我有一个定位范围的位置模型:
scope :default, where('is_default = ?', 1)
我想知道哪个是默认位置。我可以执行以下操作:@ profile.positions.default,这将返回activerecord关系和默认位置记录。问题是,现在我有默认记录,我需要访问Positions的其他属性,例如title ..
@profile.positions.default.title
但上面会返回一个错误:NoMethodError:#
的未定义方法`title'任何线索?感谢。
答案 0 :(得分:1)
范围会转换collection
个对象,而不是单个对象,因此您尝试在ActiveRecord结果数组上调用title
。
你可能想要这样的东西:
@profile.positions.default.first.title
或者,如果您只想要一条记录,则可以从范围切换到类方法:
def self.default
where('is_default = ?', 1).first
end
答案 1 :(得分:0)
class Profile < ActiveRecord::Base
has_many :positions
has_one :default_position, :class_name => 'Position',
:conditions => ['is_default = ?', true]
end
然后
@profile.default_position.title