last_insurance
値を取得するアプリをsum
作成しましたが、ビューに「nil:NilClass の未定義のメソッド「total」」が表示されます。
私のテーブルは次のとおりです。
|policies|
ID POLICY_NUM DELETED STATE POLICY_BUSINESS_UNIT_ID
1 1234 0 0 1
2 5678 0 1 1
3 3444 0 0 2
4 4577 0 1 2
|insurances|
ID POLICY_ID NET_INSURANCE TYPE_MONEY
1 1 300 1
2 1 400 2
3 1 100 1
4 2 400 1
5 2 800 2
6 3 100 1
7 3 400 2
8 4 800 2
9 2 900 1
私は多くの情報を持っていますが、これはほとんど説明していません:
http://sqlfiddle.com/#!2/ed2dd/4
ここに私のモデル:
class Policy < ActiveRecord::Base
has_many :insurances
end
class Insurance < ActiveRecord::Base
belongs_to :policy
end
これは私のコントローラーです:
class PolicyController < ApplicationController
def calculator
@business = PolicyBusinessUnit.find(:all)
@euros = Policy.find_by_sql(["SELECT i1.type_money, SUM( i1.net_insurance ) total
FROM (SELECT MAX( id ) id FROM insurances GROUP BY policy_id)i2
JOIN insurances i1 USING ( id )
JOIN policies p ON p.id = i1.policy_id
WHERE i1.type_money = 2
AND p.deleted= 0
AND p.policy_business_unit_id = ? AND p.state = ?
GROUP BY i1.type_money" ,params[:busi].to_i,params[:state].to_i ])
end
end
これは、コンボボックスで私のステータスを示す私のビューです:
<% form_tag :controller=>"policy",:action=>"calculator" do %>
Business:
<%= select_tag "busi",options_for_select(@business.collect {|t| [t.name.to_s,t.id]}, params[:busi].to_i ) %>
Status:
<%= select_tag "state",options_for_select([ ["OK",0],["CANCEL",1] ],params[:state].to_i) %>
<%= submit_tag "SEARCH", :name => nil %>
<% end %>
Sum Euros:
<input id="euros" readonly="readonly" value="<%= @euros[0].total"/>
そして、私はこのメッセージを受け取っています:
undefined method `total' for nil:NilClass
しかし、私がこれを試したとき、私が使用しないときはうまくいきましたparams[busi]
:
@dolares= Policy.find_by_sql(["SELECT sum(i1.net_insurance) total
FROM (SELECT max(id) id FROM insurances GROUP BY policy_id)i2
JOIN insurances i1 USING (id)
JOIN policies p ON p.id = i1.policy_id
WHERE i1.type_money = 2
AND p.deleted= 0
AND p.policy_business_unit_id = 2 AND p.state = ?
GROUP BY i1.type_money" , params[:state].to_i ])
もう1つ、total
ここを削除して、コントローラーを2つのパラメーターで使用したとき:
@dolares= Policy.find_by_sql(["SELECT sum(i1.net_insurance) total
FROM (SELECT max(id) id FROM insurances GROUP BY policy_id)i2
JOIN insurances i1 USING (id)
JOIN policies p ON p.id = i1.policy_id
WHERE i1.type_money = 2
AND p.deleted= 0
AND p.policy_business_unit_id = ? AND p.state = ?
GROUP BY i1.type_money" , params[:busi].to_i,params[:state].to_i ])
<input id="euros" readonly="readonly" value="<%= @euros[0]"/>
私は得#<Policy:0x7f41d09909d0>
ました。
その後、「合計」を再度追加すると、問題なく値が得られました
<input id="euros" readonly="readonly" value="<%= @euros[0].total"/>
多分私は条件を追加する必要がありますか?なにが問題ですか?