0

我有一些代码要从一个简单的类转换为一个 ActiveRecord 类。

初始代码如下所示:

为什么我对数组中的第二个、第三个对象有奇怪的行为?

但是,而不是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"

我究竟做错了什么?

4

1 回答 1

1

where返回一个数组,而不是单个项目,即使只找到一个。

这就是错误消息的意思:id在一组人上没有方法。

如果要按 id 查找,请使用find

p ||= Person.find(3)

虽然域级逻辑让我有点困惑;你会在哪里使用这个?

于 2013-05-29T19:57:07.973 回答