ruby-on-rails – Rails Active Record ID与Object ID Active :: Relation

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rails Active Record ID与Object ID Active :: Relation前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在收到这样的消息:

警告:不推荐使用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.

解决方法

ticket = Ticket.where(:number => ticket_id)返回一个ActiveRecord :: Relation(在IRB中评估时,执行数据库查询并返回一个票证数组).所以ticket.id试图在整个票证阵列上执行.id,而不是一张真正的票证.

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

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

猜你在找的Ruby相关文章