我正在为一个看似简单的概念而苦苦挣扎。使用 ActiveRecord 查询获取单个项目后,我想访问该项目的属性,但我得到nil:NilClass 的未定义方法“msg”
我使用的模型如下:
class Provider < ActiveRecord::Base
attr_accessible :alias, :name
validates :name, :presence => true
has_many :histories
def lastActive
return History.where(:provider_id => self.id).last
end
end
和
class History < ActiveRecord::Base
belongs_to :provider
attr_accessible :available, :msg
scope :active, where(:available => true)
scope :recent, :limit => 1, :order => 'created_at DESC'
end
因此,我有 2 种不同的方法来获取给定 Provider 的最新历史记录项:Provider.lastActive 和 provider.histories.active.recent.first。两者都无法获取正在返回的 History 对象的任何属性。
在 erb 方法中使用 Provider.lastActive,如下所示:
<%= provider.lastActive.msg %>
为 nil:NilClass产生未定义的方法“msg”
但,
<%= provider.lastActive.inspect %>
产生类似的东西:
> #<History id: 35, available: true, when: nil, msg: "my message", provider_id: 1, created_at: "2012-09-18 07:12:50", updated_at:
> "2012-09-18 07:12:50">
使用历史范围的相同结果,例如:
provider.histories.active.recent.first & provider.histories.active.recent.first.inspect
我在这里想念什么?做完 Model.find.last 为什么我不能访问返回的模型的属性?
在这种我真的只想要1个属性的情况下,会有什么问题:
Model.find.last.some_attribute