Techioz Blog

JavaScript を使用せずに f.text_field に書式設定された値を動的に表示する

概要

データベースでは、価格はセント単位で保存されており、適切な形式で表示するのは簡単ですが、text_field ヘルパーを使用しようとすると、JavaScript を使用せずに入力値の金額を形式設定する方法がないようです。 。

<%= form_with model: @item, local: true do |f| %>
...
  <div class="flex flex-col mb-3">
    <%= f.label :price, 'Price' %>
    <%= f.text_field :price, type:'number' %>
  </div>
...
<% end %>

プレーンな HTML/Ruby でこれを行う方法はありますか? そうでない場合、組み込みの Stimulus ライブラリを使用する簡単な JavaScript の回避策はありますか?

解決策

これを行うには、元のセントベースの値をフォームで公開するのではなく、カスタムのドルベースの属性を使用します。

# in app/models/item.rb
def price_in_dollars
  '%.2f' % (price / 100.0)
end

def price_in_dollars=(string)
  self.price = (string.to_f * 100).round
end

そしてその属性を次のようにフォームで使用します。

<%= form_with model: @item, local: true do |f| %>
  ...
  <div class="flex flex-col mb-3">
    <%= f.label :price, 'Price' %>
    <%= f.text_field :price_in_dollars, type: 'number' %>
  </div>
  ...
<% end %>

注: コントローラーの強力なパラメーターにも、price_in_dollars を追加する必要があります。