2011-02-01 14 views
3

私はこのようなメッセージを受け取りました:Rails Active Record IDとオブジェクトID + Active :: Relation

警告:オブジェクトIDは廃止予定です。

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 ::ベースであろうことを期待したい:使用オブジェクト#は、私が読んで、成功せずRuby Object#id warnings and Active Recordからトリックを試みた

をOBJECT_ID。私はそれを得るために何をすべきか、もし私が向かうべき方向があるのであれば、わからない。

目的:チケットを照会し、そのIDを印刷する。上記の例では、idの値は97でなければなりません。

答えて

7

ticket = Ticket.where(:number => ticket_id)は、ActiveRecord :: Relation(IRBで評価されたときにデータベースクエリを実行し、チケットの配列を返します)を返します。したがって、ticket.idは、実際のチケットではなく、チケットのアレイ全体で.idを実行しようとしています。

多分、最初の結果だけが必要なのでしょうか?

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

ありがとうございました。私はその超基礎を知っているが、あなたが知らない時は... – johnnygoodman

関連する問題