ruby 在f.text_field中动态显示格式化值,无需JavaScript

n8ghc7c1  于 4个月前  发布在  Ruby
关注(0)|答案(2)|浏览(33)

在数据库中,价格以美分为单位存储,并且很容易以正确的格式显示它们,但是当我尝试使用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中做到这一点,如果没有,有没有什么简单的JavaScript变通方法可以使用内置的Stimulus库?

e4eetjau

e4eetjau1#

我不会在表单中公开原始的基于美分的值,而是使用基于美元的自定义属性。

# 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添加到控制器中的强参数。

ttvkxqim

ttvkxqim2#

尝试使用指定了step attributenumber_field_tag,而不是text_field

<%= f.number_field_tag :price, nil, step: 0.01 %>
# => <input id="price" name="price" step="0.01" type="number" />

字符串

相关问题