如何获取activeRecord对象的属性

时间:2013-01-23 11:34:55

标签: ruby-on-rails-3 rails-activerecord

我有这个模型

class Contestcode < ActiveRecord::Base
  attr_accessible :code, :used

  def self.is_valid(code)
    valid = false
    contestcode = Contestcode.where('code = ?', code)
    Rails.logger.debug("My object: #{contestcode.inspect}");
    if (contestcode)
      valid = contestcode.used
    end
    valid
  end
end

当我尝试运行self.is_valid时,我收到此错误:

undefined method `used' for #<ActiveRecord::Relation:0x007ff525fde1a8>

debug语句的输出是:

My object: [#<Contestcode id: 1, code: "aaaaa", used: false, created_at: "2013-01-23 10:21:32", updated_at: "2013-01-23 10:21:32">]

如何获得竞赛代码的二手属性?

1 个答案:

答案 0 :(得分:2)

Contestcode.where会返回Contestcodes的集合。在您的情况下,您正在搜索的code是(希望!)唯一,因此如果找到它将是1个项目的集合,如果不是,则为0个项目。

你可以在你的调试语句中看到这一点 - 注意你的对象周围的方括号,它表示它在一个数组中(实际上是一个ActiveRecord::Relation,它允许你将查询链接在一起,但它的行为大多像一个数组)。

您真正想要的是Contestcode.where(...).first,如果找到了,则会从数组中提取Contestcode,如果没有,则返回nil