以下のようなテーブルがあるとします。
users
id
name
orders
id
user_id
amount
このようなテーブルがあっとしてuser毎のorderのamount合計を表示したいと思ったわけです。
とりあえず二つ方法がある感じです。
(1)userコントローラからorderコントローラをネスト表示してorderコントローラのリストに合計値を表示。
以下のような感じでコントローラーを準備します。
class UsersController < ApplicationController active_scaffold :users do |config| config.nested.add_link("オーダー", [:orders]) end end class OrdersController < ApplicationController active_scaffold :orders do |config| config.columns[:amount].calculate = :sum end endこれでhttp://budanters.blogspot.com/2009/10/adding-multiple-column-calculations-to.htmlにあるような感じでリストの下に合計値が表示されます。
合計値意外に、calculateが対応しているものとして:avgがあるようです。
この方法で表示すると合計値がSumと表示されるので、これを日本語にするには
vendor/plugins/active_scaffold/frontends/default/views/_list_calculations.html.erb
を対象のviewにコピーしていじってやればOKです。
この場合だと
app/view/order
の下にコピーとなります。
これでもよいっちゃぁよいのですが、できるならばuserコントローラに表示したいです。
というわけで、もう一つの方法です。
(2)モデルに合計値を定義しておいて表示する
まずはuserモデルに合計値を定義します。
class User < ActiveRecord::Base has_many :orders def order_total self.orders.sum(:amount) end endで、以下のようにuserコントローラを準備します。
class UsersController < ApplicationController active_scaffold :users do |config| config.list.columns << :order_total end end
これでuserのリストのユーザ毎の合計値が表示されます。
なかなか便利なActiveScaffoldです。
0 件のコメント:
コメントを投稿