背景
・カラムの合計値や平均値といった計算をviewに書いていると、ごちゃごちゃしてきて読みにくくなってきたため。
・viewに書くのか、controllerに書くのか問題の解決のため
導入
まずはgemfileに追記します。
gem 'active_decorator'
bundle installします。
$ bundle install
decoratorファイルの生成
次に、decoratorファイルを作ります。
今回はscoreというモデルに関するものです。
scoreの部分は好きな名前にして下さい。
$ rails g decorator score
そうすると、このようなファイルを生成してくれます。
app/decorators/score_decorator.rb
今回はゴルフのスコアだったので、18Hの合計を計算させます。
module ScoreDecorator
def total_score
format('%+d', hole1_score.to_i +
hole2_score.to_i +
hole3_score.to_i +
・
・
・
hole18_score.to_i)
end
end
viewで出力
これでviewがすっきりしました!
<% @scores.each do |score| %>
<%= score.total_score %>
<% end %>