Как получить доступ к результату сиквела с помощью оператора точки в ruby?
Я новичок в сиквеле и рубине, и мне нужно кое-что помочь тебе. Одним словом, я не могу получить доступ к результату запроса к базе данных с помощью оператора точки. Я использую адаптер сиквела в проекте Padrino Ruby. Например,
persons = Person.all
persons.each do |p|
puts p.name . # this output correct person name, as 'john'
end
Но если я сделаю какой-то запрос
persons = Person.where(:age=>20)
persons.each do |p|
puts p.name . # this line cause error
end
Я сравнил их типы данных, и они отличаются друг от друга.
puts persons # in first case - array
#<Gig:0x007fbdb6d64ef0>
#<Gig:0x007fbdb6d64838>
#<Gig:0x007fbdb6d641f8>
puts persons # in second case - object
#<Sequel::Postgres::Dataset:0x007fbdbc614898>
Поэтому я попытался изменить результат на хэш-массив во втором случае, чтобы получить доступ к полям с помощью оператора точки
persons_hash= persons.collect do |p|
ro.to_hash
end
В этом случае я смог получить доступ к имени пользователя с person[0][:name], но не смог получить доступ с помощью оператора точки.
Итак, я хочу знать, как мне нужно сделать, чтобы получить доступ к результату запроса Sequel с помощью оператора точки.
Спасибо:)
0 ответов
persons.each do |p|
puts p.name . # this line cause error
end
Какую именно ошибку вы здесь получаете? Я предполагаю ошибку неопределенного метода? Кажется, вы знакомы с синтаксисом ActiveRecord. Сам сиквел не использовал, но он немного отличается от AR. Согласно их документам, вы бы сделали что-то вроде этого
persons.map(:name) # => ['Harry', 'Steve', 'Israel', ...]
Метод all возвращает массив хешей, каждый из которых соответствует записи.
В приведенном выше примере я бы попробовал следующее:
persons.each do |p|
puts p[:name] . # here we are now accessing the name hash key instead of trying to access the name method.
end
Вы хотите получить доступ к ключу имени каждого повторяемого хэша. Потому что вы перебираете массив хэшей. Вот почему вы можете получить доступ к этим данным с помощьюperson[0][:name]
. Вы вызывали 0-й элемент массива персонажей и получали доступ к его хэш-ключу name.