#ruby-on-rails
#ruby-on-rails
Вопрос:
В моем приложении rails у меня есть следующая функция на одной из моих страниц контроллера.
def tree
@jstree = ActiveRecord::Base.connection.execute("Select sequence, depth, node, imageid, range from.....several joins")
end
Теперь я хочу выполнить цикл по набору результатов и отобразить последовательность только на моей странице просмотра tree.html.erb
. Я попробовал следующий код, похоже, он не работает.
<% @jstree.each do |tree| %>
<%= tree.sequence %>
<% end %>
Я получаю сообщение об ошибке : undefined method 'sequence' for #<Array:0x60e0088>
.
Есть ли способ перебирать результирующий набор выполненного sql-запроса и отображать значение каждого столбца?
Большое, большое спасибо за все предоставленные предложения 🙂
Комментарии:
1. Какую версию rails и какой адаптер базы данных вы используете?
2. я использую rails 2.3.5 и адаптер mysql
Ответ №1:
Сохраняя тот же синтаксис, что и OP
<% @jstree.each do |tree| %>
<%= tree[0] %>
<% end %>
достигнет того, что вы искали.
Ответ №2:
Вы получаете эту ошибку, потому что то, что вы получаете @jstree
, — это необработанный результат адаптера DB. Если вы хотите запросить некоторые объекты, выполнив необработанные SQL-запросы, затем используйте find_by_sql
. Пример:
Client.find_by_sql("SELECT * FROM clients INNER JOIN orders ON clients.id = orders.client_id ORDER clients.created_at desc")
Комментарии:
1. Что
Client
в этом случае?2. @Catfish ваша модель.