2011-04-30 4 views
0

私は入れ子になったフォームを持っています。このフォームはlistと呼ばれるモデルで、nameとa:month属性を持っています。このリストモデルには、呼び出されたitem内にネストされた別のモデルがあります。このモデルには:nameと:amount属性があります。リストには多くのアイテムがあり、アイテムはリストに属しています。私は私のリストを表示するページでは、この変数を呼び出すと、それはすべての項目の合計を示しRails 3の別のエントリの変数の値を表示しますか?

@amount_total = Item.where(:list_id => @list).sum("amount") 

:私はこのような項目の金額のすべてを合計し、私のコントローラ内の変数を(それが最善の方法かどうかわからない)が作成しました現在のリストidの金額。私がやりたいことは、現在のリストの合計を以前に入力したリストと比較できることです。このような変数を使用することは可能ですか?もしそうなら、どうですか?そうでない場合、私は何をすべきですか?

EDIT私が持っているコントローラの私のshowアクションで

(下記の回答に基づいて)次:

@list = List.find(params[:id]) 

しかし、私は、変数@previous_listを作成するには、このようなものが必要:

@previous_list = List.order("id").where("id<? AND user_id=?", self.id, self.user_id).last 

同じユーザーではなく、以前に入力したリストを見つける必要があります。しかし、私が変数をこのように置くと、定義されていないメソッド "user_id"があると言います。思考?

+0

あなたのUserモデルはListとbelongs_to関係にありますか? ListはUserとhas_many関係にありますか?また、おそらく、idではなく、あなたのクエリを順序付けるためにcreated_atを使いたいと思うでしょう。 Idは必ずしも時系列であるとは限りませんが、created_atは常にそうです。 – ipd

答えて

0

IPDからの答えは、最も近いソリューションに私を得た、そしてここで私は私の特定の状況のた​​めにそれを完成する方法である:

前のリストの合計表示するには - リストのヘルパー:では

def prev_total(list) 
list and list.items.sum("amount") 
end 

をlist.rbモデル:私のリストshow.html.erbファイルで次に

def previouslist 
    self.class.order("id").where("id<? AND user_id=?", self.id, self.user_id).last 
end 

<%= prev_total(@list.previouslist) %> 

これは素晴らしい機能です!

1

あなたはおそらく、あなたのリストのモデルにこのロジックを移動し、そこにTOTAL_AMOUNTアクセサを作成する、などの必要があります。

def total_amount 
    Item.where(:list_id => self.id).sum("amount") 
end 

は、その後、あなたのコントローラであなただけの@previous_list変数に前のリストをロードする必要があります。あなたの意見で

あなたがして行うことができるようになります:

<%= @list.total_amount %> 
<%= @previous_list.total_amount %> 

イアン。

+0

クイックフィードバックをいただきありがとうございます。申し訳ありませんが疑問の質問には、@listと@previous_list変数をどこでどのように定義しますか? – FattRyan

+0

良い質問です!これはあなたのコントローラーの「ショー」アクションで実行されます。どのように実装するのかはあなたの意図に左右されます。以前のリストはロードしたいのですか?前のことはどういう意味ですか? – ipd

+0

ありがとう、私はほとんどそこにいるが、まだ何かが欠けている。私は上記の編集に入れました。 – FattRyan

関連する問題