如何将具有“new”的类转换为具有“where”的ActiveRecord?

时间:2013-05-29 19:47:13

标签: ruby rails-activerecord

我有一些代码,我正在从一个简单的类转换为一个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"

我做错了什么?

1 个答案:

答案 0 :(得分:1)

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

这就是错误信息所说的:一组人没有id方法。

如果您想按ID查找,请使用find

p ||= Person.find(3)

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