我有一些代码,我正在从一个简单的类转换为一个ActiveRecord类。
初始代码如下所示:
Why do I get odd behaviour with second, third objects in an array?
但是,我使用Person.new
而不是Person.where
:
Person.new(:id => 1, :name => "Adam"),
和(为了符合上述目的而略作设计):
Person.where("id > ?", 0).order(id ASC").first # statement 1
而不是:
person ||= Person.new(:id => 3, :name => "Some default")
我有:
person ||= Person.where("id = 3")
这一切都正常,除非statement 1
返回nil,对于我的情况下的30213以上的ID。然后我明白了:
@people[1].id
=> 30213
@people[2].id
NoMethodError: undefined method `id' for [#<Person id: 3, name: "Bob">]:ActiveRecord::Relation
from /Users/snowcrash/.rvm/gems/ruby-2.0.0-p195/gems/activerecord-3.2.9/lib/active_record/relation/delegation.rb:45:in `method_missing'
奇怪的是,所有数据似乎都已正确初始化:
#<Person id: 3, name: "Bob"
我做错了什么?
答案 0 :(得分:1)
where
返回一个数组,而不是单个项目,即使只找到一个。
这就是错误信息所说的:一组人没有id
方法。
如果您想按ID查找,请使用find
:
p ||= Person.find(3)
虽然域级逻辑让我有点困惑;你会在哪里使用它?