Rails活动记录ID与对象ID +活动::关系

时间:2011-02-01 03:56:32

标签: ruby-on-rails activerecord object

我一直在收到这样的消息:

警告:不推荐使用Object#id;使用Object#object_id

我从Ruby Object#id warnings and Active Record读取并尝试了这些技巧但没有成功:

108-125-94-123:toptickets johnnygoodman$ rails c
Loading development environment (Rails 3.0.3)
>> ticket_id = 8899
=> 8899
>> ticket = Ticket.where(:number => ticket_id)
=> [#<Ticket id: 97, name: "Set Up API to Feed Customer Info into Bronto  ", number: "8899", category_id: 15, created_at: "2011-01-31 21:24:29", updated_at: "2011-01-31 21:24:29", position: 20>]
>> ticket.id
(irb):3: warning: Object#id will be deprecated; use Object#object_id
=> 2175680980
>> ticket[:id]
TypeError: Symbol as array index
        from /Library/Ruby/Gems/1.8/gems/activerecord-3.0.3/lib/active_record/relation.rb:363:in `[]'
        from /Library/Ruby/Gems/1.8/gems/activerecord-3.0.3/lib/active_record/relation.rb:363:in `send'
        from /Library/Ruby/Gems/1.8/gems/activerecord-3.0.3/lib/active_record/relation.rb:363:in `method_missing'
        from (irb):4
>> ticket.class
=> ActiveRecord::Relation

我希望当我查询票证时,它将属于ActiveRecord :: Base类。我不知道该怎么做才能实现这个目标,或者我应该采取的方向。

目标:查询故障单,打印其ID。在上面的示例中,id的值应为97.

1 个答案:

答案 0 :(得分:7)

ticket = Ticket.where(:number => ticket_id)返回一个ActiveRecord :: Relation(在IRB中进行评估时,执行数据库查询并返回一个票证数组)。因此ticket.id正在尝试对整个故障单数组执行.id,而不是一个实际的故障单。

也许你只想要第一个结果?

>> ticket = Ticket.where(:number => ticket_id).first
>> puts ticket.id
=> 97