Ruby 如何从带有“的类转换”;新";要使用“活动录制”,请执行以下操作:;“在哪里?”;?

Ruby 如何从带有“的类转换”;新";要使用“活动录制”,请执行以下操作:;“在哪里?”;?,ruby,rails-activerecord,Ruby,Rails Activerecord,我有一些代码正在从简单类转换为ActiveRecord类 初始代码如下所示: 但是,我使用的不是Person.new而是Person.where: Person.new(:id => 1, :name => "Adam"), 和(为配合上述要求而略微设计): 而不是: person ||= Person.new(:id => 3, :name => "Some default") 我有: person ||= Person.where("id = 3") 在我的

我有一些代码正在从简单类转换为ActiveRecord类

初始代码如下所示:

但是,我使用的不是
Person.new
而是
Person.where

Person.new(:id => 1, :name => "Adam"), 
和(为配合上述要求而略微设计):

而不是:

person ||= Person.new(:id => 3, :name => "Some default")
我有:

person ||= Person.where("id = 3")
在我的例子中,除了
语句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'
@people[1].id
=> 30213
@人物[2].id
NoMethodError:ActiveRecord::Relation的未定义方法“id”
from/Users/snowcrash/.rvm/gems/ruby-2.0.0-p195/gems/activerecord-3.2.9/lib/active\u record/relation/delegation.rb:45:in'method\u missing'
奇怪的是,所有数据似乎都已正确初始化:

#<Person id: 3, name: "Bob"

#
其中
返回一个数组,而不是单个项,即使只找到一个

这就是错误消息所说的:在一组人中没有
id
方法

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

p ||= Person.find(3)

虽然域级逻辑让我有点困惑;您将在何处使用它?

其中
实际返回一个
ActiveRecord::Relation
,它在某些操作中的行为类似于数组,但不是数组。@Holger完全正确,但就这个问题而言,数组足够接近了。是的,这是可行的。不清楚你所说的“域级逻辑”是什么意思-想扩展…?@SnowCrash我的意思是,你为什么要这样做?通常,如果找不到,您需要创建一个,而不是创建一个,然后可以选择将其替换为找到的。
p ||= Person.find(3)