我有这个模型
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">]
如何获得竞赛代码的二手属性?
答案 0 :(得分:2)
Contestcode.where
会返回Contestcodes的集合。在您的情况下,您正在搜索的code
是(希望!)唯一,因此如果找到它将是1个项目的集合,如果不是,则为0个项目。
你可以在你的调试语句中看到这一点 - 注意你的对象周围的方括号,它表示它在一个数组中(实际上是一个ActiveRecord::Relation
,它允许你将查询链接在一起,但它的行为大多像一个数组)。
您真正想要的是Contestcode.where(...).first
,如果找到了,则会从数组中提取Contestcode,如果没有,则返回nil
。