2014年9月24日水曜日

Rails update時に値を変更して更新したい。

たとえば、保存時10円単位で四捨五入して保存したい場合。
ついでに登録日を1日ずらす。

日付型の項目は、年、月、日、時、分、秒と別れてパラメタに入ってくるので、
扱いづらい。
ので、一旦モデルに突っ込んで処理し、その後ハッシュに変換する。

def update
#パラメタを一旦モデルに突っ込む
tmp = Syohin.new(syohin_params)
#金額を10円単位で丸める
tmp.kingaku = tmp.kingaku.round(-1)
#日付型の登録日を1日ずらす。
tmp.record_datetime = tmp.record_datetime + (60 * 60 * 24)
#モデルをハッシュに変換する。
tmp2 = tmp.attributes
#不要なキーを削除
["id","created_at","updated_at"].each do |key|
tmp2.delete(key)
end
#updateに突っ込む
respond_to do |format|
if @syohin.update(tmp2)
format.html { redirect_to @syohin, notice: '更新完了' }
else
format.html { render :edit }
end
end
end

1 件のコメント:

  1. さすがにちょっとアレなのでコードレビューする。
    トラックバック。 http://blog.eiel.info/blog/2014/09/24/re-modified-rails-update/

    返信削除