2012-02-01 120 views
0

我有,我有定义的范围位置模型:访问属性

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

想法是,我想知道这是默认的位置。我可以这样做:@ profile.positions.default,这将返回一个activerecord关系和默认的位置记录。问题是,现在我有默认的记录,我需要访问位置的其他属性,如冠军。

@profile.positions.default.title 

但上述返回一个错误:NoMethodError:未定义的方法`冠军”为#

任何线索?谢谢。

回答

1

作用域将对象变成collection,而不是单个对象,因此您试图对ActiveRecord结果数组调用title

你可能想是这样的:

@profile.positions.default.first.title 

或者,如果你总是希望只有一个记录,您可以从范围切换到一个类的方法:

def self.default 
    where('is_default = ?', 1).first 
end 
+0

谢谢,完全有道理。 – absolutskyy 2012-02-01 19:52:13

0
class Profile < ActiveRecord::Base 
    has_many :positions 
    has_one :default_position, :class_name => 'Position', 
          :conditions => ['is_default = ?', true] 
end 

然后

@profile.default_position.title