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 を追加する必要があります。