Выполнение SQL-запроса в рельсах - PullRequest
2 голосов
/ 10 апреля 2010

У меня есть приложение рельсов, где я должен вычесть 2 метки времени и отобразить результат на веб-странице

Я использовал следующий SQL-оператор и получаю результаты.

select (julianday(resolutions.created_at)-julianday(tickets.created_at))*24 from tickets,resolutions

значение tickets.created_at равно 2010-04-05 18:59:02, которое является отметкой времени, а значение Resolution.created_at равно 2010-04-08 08: 10: 33

Теперь, куда мне поместить этот sql, чтобы меня можно было увидеть на моей веб-странице. Я попробовал это на странице просмотра со следующим, но ничего не показывалось:

<% @sql = "select (julianday(resolutions.created_at)-julianday(tickets.created_at))*24 from tickets,resolutions" %>
<% @t=(ActiveRecord::Base.connection.execute(@sql)) %>

Так, как мне отобразить это на моей веб-странице?

при выполнении вышеизложенного я получаю вывод, напечатанный на веб-странице как

061.1919444389641(julianday(resolutions.created_at)-julianday(tickets.created_at))*2461.1919444389641

только 61.1919444389641 должен быть напечатан, но оператор запроса также печатается.

Ответы [ 2 ]

1 голос
/ 10 апреля 2010

В вашем контроллере

@tickets = Tickets.find(
  :all, 
  :joins => :resolution, 
  :select => '(julianday(resolutions.created_at)-julianday(tickets.created_at))*24 AS interval'
)

На ваш взгляд

<% @tickets.each do |ticket|%>
  <%= ticket.interval %>
<% end %>

Как правило, вы бы поместили эту логику в одну из своих моделей, например, так:

В ваших билетах Модель

def time_to_resolve
  resolution.created_at - created_at
end

Чтобы уменьшить количество запросов при итерации по нескольким запросам, вы должны использовать это:

Tickets.find(:all, :include => :resolution)
1 голос
/ 10 апреля 2010

Вы должны поместить свой собственный SQL в свой класс модели, определенно , а не в представлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...