改良中...金額は金額らしく右寄せ、カンマ区切りで

現状では「10000」と入力しても、フォームの左端からそのまま表示される状態。やはり金額であれば、右寄せにして「10,000」と表示したい。

  • number_with_delimiterを使えば、簡単にカンマ区切りの文字列に変換することができる。
  • :autocomplete=>'off'オプションで、ブラウザ側のオートコンプリート表示を無効にすることができる。
  • :style=>"text-align:right"オプションで、フォーム内の文字列を右寄せすることができる。(本当はスタイルシートに分けて設定するべきかもしれないが...。)
<%# ビュー: app/views/slips/_form.rhtml %>
...(中略)...
  <p><label for="slip_total_yen">合計金額</label><br/>
  <%= text_field 'slip', 'total_yen', :value=>number_with_delimiter(@slip.total_yen), :autocomplete=>'off', :style=>"text-align:right"  %></p>
...(中略)...
  • ところが、上記だけではフォームから送信されるパラメータが「10,000」となる場合、アクティブレコードの型変換に任せたままでは「10」が保存されてしまう。(試しにirbで'10,000'.to_iと入力すると、10に変換された。to_iメソッドはカンマの直前までしか、数値として認識しないようだ。)
  • そこで、以下のようにtotal_yen=()メドッドをオーバーライドして、カンマを除外した文字列を渡すようにすることで、「10000」と保存できるようになった。
# モデル: app/models/slip.rb
class Slip < ActiveRecord::Base
...(中略)...
  def total_yen=(value)
    # nilはnilのまま保存したい。to_iを付加してしまうとnilが0になってしまう。
    # 文字列の状態を維持してARの型変換に任せている。
    self[:total_yen] = value.gsub(/,/, '')
  end
...(中略)...