выполнить sql-запрос и перебрать результирующий набор в rails

#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 ваша модель.