以下のようなテーブルがあるとします。
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 件のコメント:
コメントを投稿