2017-02-18 8 views
0

Каков правильный способ доступа к объектам внутри ответа на запрос Active Record? Я специально хочу получить доступ к значению ключа question, но я хочу, чтобы иметь возможность использовать другие значения позже в моем коде.Ruby - правильный способ доступа к ответу на запрос

from -e:1:in `<main>'irb(main):008:0> poll_data 
=> #<ActiveRecord::Relation [#<Poll id: 1, user_id: 1, question: "(conorao) - Which NFL team do you like the best?", poll_type: "multiple_choice", active: true, created_at: "2017-02-17 21:08:40", updated_at: "2017-02-17 21:08:40">]> 
irb(main):009:0> poll_data.class 
=> Poll::ActiveRecord_Relation 

Я не мог понять, как получить доступ значение, связанное с ключом question. Поэтому я переформатировал запрос на poll_data = Poll.where(user_id: 1, active: true).pluck и аксессуар на poll_data[0][2], но я знаю, что это код мусора.

+0

'poll_data.first.question'. «Связь» - это объект, подобный коллекции. Среди прочего, у него есть методы 'first',' length' и 'to_a' –

+0

Спасибо! Так ответ запроса - массив, содержащий отдельные пары хэшей? UPDATE: отношение - получено – HashRocketSyntax

ответ

2

ActiveRecord::Relation - это класс рельсов, представляющий нуль, одну или несколько строк из вашего хранилища данных. Простую информацию, которую вы должны знать для ее использования, вероятно, что этот класс включает модуль Enumerable.

Таким образом, вы могли бы назвать each, first, last, select методы и это только примеры. http://ruby-doc.org/core-2.3.1/Enumerable.html

poll_data.each do |item| 
    puts item.question 
end 
+0

Так почему же 'poll_options_data = PollOption.where (poll_id: poll_data.id)' 'poll_options_data.each do | item | puts item.value end' Выплевывайте весь ответ вместо значений? – HashRocketSyntax

+0

Вы пробовали это в консоли? Если это так, вероятно, это печать значения для каждого элемента, но тогда вы должны знать, что метод 'each' возвращает перечислимое значение, поэтому вы также видите, что это тоже напечатано. Это не проблема в вашем коде вне консоли. – Ursus

+0

Да, это был результат, который я видел в консоли. Спасибо! – HashRocketSyntax

0

Где возвращает ActiveRecord :: Связи вы можете получить доступ к первому детали просто делая

poll_data.first.question, вы можете цикл через результирующий, если вы хотите, чтобы выполнить операцию на каждый опросе, как этот

poll_data.each do |poll| 
    puts poll.question 
end 

Существует также .first, .second, .third и .fifth для удобного поиска

 Смежные вопросы

  • Нет связанных вопросов^_^