访问使用ActiveRecord.find找到的对象的属性

时间:2012-09-18 19:08:10

标签: ruby-on-rails ruby activerecord

我正在努力寻找一个看似简单的概念。在使用ActiveRecord查询获取单个项目之后,我想访问该项目的属性但是得到未定义的方法`msg'为nil:NilClass

我使用的模型如下:

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

因此,我有两种不同的方式来获取给定提供者的最新History项:Provider.lastActive和provider.histories.active.recent.first。两者都无法获得正在返回的History对象的任何属性。

在erb方法中使用Provider.lastActive,如下所示:

<%= provider.lastActive.msg  %>

为nil产生未定义的方法`msg':NilClass

但是,

<%= 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

1 个答案:

答案 0 :(得分:0)

您肯定想要删除该行:

attr_accessible :available, :msg

这是不对的,会导致问题。

我不明白为什么它会为nil:NilClass错误提供一个未定义的方法`msg',但是把它拿出去看看是否能修复它。

如果你得到最后一个,也不应该有订单方法。

最后,一旦你开始工作,由于你有历史关联,你可以按如下方式定义lastActive:

def last_active
  return histories.order(:id).last
end