0

今月の収入を先月と比較した単純な月次レポートを電子メールで送信しようとしています。

私はレポート コントローラー (Clinical と呼ばれる別のモデルを参照する) ですべての作業を行っています。

# Clinical income by month report
@clinical_income_by_month = Clinical.select(%q{date_format(transactiondate, '%Y') as year, date_format(transactiondate, '%M') as month, sum(LineBalance) as income})
                               .where(:payments => 0)
                               .where('linebalance <> ?', 0)
                               .where('analysiscode <> ?', 213)
                               .group(:monthyear)

次に、データを含むテーブルのパーシャルを作成します。

<div class="row">
    <div class="twelve columns"><h5>This months income so far is <span style="font-size:1.2em"class="<% if @clinical_income_by_month.first.income >= @clinical_income_by_month.first(:offset => 12).income %>green<% else %>red<% end %> radius label"><%= number_to_currency(@clinical_income_by_month.first.income, :unit => "&pound;", :separator => ".", :delimiter => ",") %></span></h5> <%= @clinical_income_by_month.first.month %> <%= @clinical_income_by_month.first(:offset => 12).year %>'s income was <%= number_to_currency(@clinical_income_by_month.first(:offset => 12).income, :unit => "&pound;", :separator => ".", :delimiter => ",") %>.</div>
  </div>
<hr />

<table>
  <tr>
    <th>Year</th>
    <th>Month</th>
    <th>Income</th>
  </tr>  
  <% @clinical_income_by_month.each do |c| %>
  <tr>
    <td><%= c.year %></td>
    <td><%= c.month %></td>
    <td><%= number_to_currency(c.income, :unit => "&pound;", :separator => ".", :delimiter => ",") %></td>
  </tr>    
  <% end %>
</table>

その一部をメールに取り込めるようにしたいのですが、それが不可能な場合は、最後の収入の価値を示したいと思います.

<%= @clinical_income_by_month.first.income %>

私のメールコードは次のようになります。

Finance Report
================================================
<%= number_to_currency(@clinical_income_by_month.first.income) %>

私が得ているエラーは次のとおりです。

1.9.2-p318 :009 > UserMailer.finance_report().deliver
ActionView::Template::Error: undefined method `first' for nil:NilClass
from   /Users/dannymcclelland/Projects/premvet/app/views/user_mailer/finance_report.text.erb:3:in  `_app_views_user_mailer_finance_report_text_erb___4501411113534248604_70358523362460'

標準メソッドから値を取得すると機能します。

<%= number_to_currency(Clinical.first.UserID) %>

しかし、私が作成した @clinical_income_by_month レポートから呼び出すときではありません。

任意のポインタをいただければ幸いです!

4

2 に答える 2

3

次のようなことをする必要があります:

user_mailer.rb で

def finance_report(clinical_income_by_month)

  @clinical_income_by_month = clinical_income_by_month

  ... # all you had here before

end

そして、コントローラーで次のように呼び出します。

UserMailer.finance_report(@clinical_income_by_month).deliver
于 2012-05-01T07:14:46.033 に答える
0

明らかにあなたの @clinical_income_by_month はゼロです。これは、select クエリが期待どおりに値を返していないことを意味します。これはモデルの問題です。ビューをチェックする代わりに、「Rails コンソール」を起動して、クエリが必要な値を返すかどうかを確認する必要があります。

于 2012-05-01T05:12:33.513 に答える