Идентификатор активной записи Rails против идентификатора объекта + Active :: Relation - PullRequest
3 голосов
/ 01 февраля 2011

Я получаю сообщения, подобные этому:

предупреждение: объект # id будет объявлен устаревшим;использовать Object # object_id

Я прочитал и попробовал трюки из Ruby Object # id предупреждений и 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.Я не уверен, что нужно сделать, чтобы это продолжалось, или если это направление, в котором я должен идти.

Цель: запросить билет, распечатать его идентификатор.В приведенном выше примере значение идентификатора должно быть 97.

1 Ответ

7 голосов
/ 01 февраля 2011

ticket = Ticket.where(:number => ticket_id) возвращает ActiveRecord :: Relation (который при оценке в IRB выполняет запрос к базе данных и возвращает массив заявок).Таким образом, ticket.id пытается выполнить .id для всего массива заявок, а не для одного действительного билета.

Может быть, вам нужен только первый результат?

>> ticket = Ticket.where(:number => ticket_id).first
>> puts ticket.id
=> 97
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...