通过Rails关系访问属性

时间:2012-02-01 19:36:02

标签: ruby-on-rails

我有一个定位范围的位置模型:

scope :default, where('is_default = ?', 1)

我想知道哪个是默认位置。我可以执行以下操作:@ profile.positions.default,这将返回activerecord关系和默认位置记录。问题是,现在我有默认记录,我需要访问Positions的其他属性,例如title ..

@profile.positions.default.title 

但上面会返回一个错误:NoMethodError:#

的未定义方法`title'

任何线索?感谢。

2 个答案:

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