0

我有这个模型

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>

调试语句的输出是:

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">]

如何获得比赛代码的 used 属性?

4

1 回答 1

2

Contestcode.where返回竞赛代码的集合。在您的情况下,code您正在搜索的是(希望!)唯一的,因此如果找到它,它将是 1 个项目的集合,如果没有,它将是 0 个项目的集合。

您可以在调试语句中看到这一点 - 请注意对象周围的方括号,这表明它在一个数组中(实际上是一个ActiveRecord::Relation,它允许您将查询链接在一起,但它的行为主要类似于数组)。

你真正想要的是Contestcode.where(...).first,如果找到它,它将从数组中提取 Contestcode,否则返回nil

于 2013-01-23T11:41:52.787 回答