単純な概念のように見えるものに苦労しています。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
そのため、特定のプロバイダーの最新の履歴アイテムを取得するには、Provider.lastActive と provider.history.active.recent.first の 2 つの方法があります。どちらも、返される履歴オブジェクトの属性のいずれかを取得できません。
次のように、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">
次のような History のスコープを使用した同じ結果:
provider.histories.active.recent.first & provider.histories.active.recent.first.inspect
ここで何が欠けていますか?Model.find.last を実行した後、返されたモデルの属性にアクセスできないのはなぜですか?
このような場合、本当に 1 つの属性のみが必要な場合、何が問題になるでしょうか。
Model.find.last.some_attribute