Использование необработанных SQL-запросов в приложении Rails 3?

Я работаю над миграцией устаревшей базы данных в мое приложение Rails (3.2.3 ). Исходная база данных содержит довольно много длинных sql-запросов для отчетов. На данный момент, что я хотел бы сделать, это использовать sql-запросы в приложении Rails, а затем один за другим (, когда позволяет время, )заменять sql-запросы на «правильные» запросы Rails.

У меня есть клиническая модель, а контроллер имеет следующий код:

 @clinical_income_by_year = Clinical.find_all_by_sql(SELECT date_format(c.transactiondate,'%Y') as Year, 
                                                 date_format(c.transactiondate,'%b') as Month,
                                                 sum(c.LineBalance) as "Income"
                                                 FROM clinical c
                                                 WHERE c.Payments = 0 AND c.LineBalance <> 0
                                                 AND c.analysiscode <> 213
                                                 GROUP BY c.MonthYear;)

Однако, когда я запускаю этот код, я получаю несколько ошибок, связанных с форматированием.

Started GET "/clinicals" for 127.0.0.1 at 2012-04-29 18:00:45 +0100

SyntaxError (/Users/dannymcclelland/Projects/premvet/app/controllers/clinicals_controller.rb:6: syntax error, unexpected tIDENTIFIER, expecting ')'
...rmat(c.transactiondate,'%Y') as Year, 
...                               ^
/Users/dannymcclelland/Projects/premvet/app/controllers/clinicals_controller.rb:7: syntax error, unexpected tIDENTIFIER, expecting keyword_end
...rmat(c.transactiondate,'%b') as Month,
...                               ^
/Users/dannymcclelland/Projects/premvet/app/controllers/clinicals_controller.rb:8: syntax error, unexpected tIDENTIFIER, expecting keyword_end
...          sum(c.LineBalance) as "Income"
...                               ^
/Users/dannymcclelland/Projects/premvet/app/controllers/clinicals_controller.rb:10: syntax error, unexpected tCONSTANT, expecting keyword_end
...       WHERE c.Payments = 0 AND c.LineBalance <> 0
...                               ^
/Users/dannymcclelland/Projects/premvet/app/controllers/clinicals_controller.rb:10: syntax error, unexpected '>'
...yments = 0 AND c.LineBalance <> 0
...                               ^
/Users/dannymcclelland/Projects/premvet/app/controllers/clinicals_controller.rb:11: syntax error, unexpected '>'
...          AND c.analysiscode <> 213
...                               ^

Есть ли что-то, что я должен сделать с sql-запросом, прежде чем импортировать его в контроллер? Хотя возможно, что с запросом (что-то не так. Он был написан довольно давно ), но при прямом запуске в базе данных он работает должным образом. Он возвращает такой массив:

----------------------------------------------
|  Year      |    Month     |     Income     |
----------------------------------------------
----------------------------------------------
|  2012      |    January   |   20,000       |
|  2012      |    February  |   20,000       |
|  2012      |    March     |   20,000       |
|  2012      |    April     |   20,000       |
----------------------------------------------
etc..

Будем признательны за любую помощь, совет или общие указания!

Я читаю http://guides.rubyonrails.org/active_record_querying.html, пытаясь преобразовать запрос sql в правильный запрос Rails.

До сих пор я сопоставил предпоследнюю строку:

AND c.analysiscode <> 213

с

@clinical_income_by_year = Clinical.where("AnalysisCode != 213")

маленькими шагами!

ОБНОВЛЕНИЕ

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

@clinical_income_by_year = Clinical.where("AnalysisCode != 213 AND Payments != 0 AND LineBalance != 0").page(params[:page]).per_page(15)

Я изо всех сил пытаюсь встроить следующие две строки запроса sql:

sum(c.LineBalance) as "Income"

и

GROUP BY c.MonthYear;)

Мой код представления выглядит так:

<% @clinical_income_by_year.each do |clinical| %>
  
    <%= clinical.TransactionDate.strftime("%Y") %>
    <%= clinical.TransactionDate.strftime("%B") %>
    <%= Clinical.sum(:LineBalance) %>
      
  <% end %>

  <%= will_paginate @clinical_income_by_year %>

7
задан mu is too short 23 December 2013 в 20:09
поделиться