com*_*com 16 ruby-on-rails simple-form
我想用SImpleForm创建一个简单的货币输入.
因此,money字段应该具有最小值0,因此用户不能输入小于0的值.
但是我不知道如何用简单的形式定义最小值.
我想知道是否可能.
Rya*_*ann 23
非也!您想要的表单的(简化)HTML看起来像这样:
<form>
<input type="number" min="0" step="any" name="amount">
</form>
Run Code Online (Sandbox Code Playgroud)
注意输入字段上的两个非常重要的属性:min设置为0,因为你不允许负数,并step设置为any,因为你想允许小数.如果你只想要美元金额,你可以设置step="1",例如.此外,如果您想设置最大值,您可以使用该max属性.
重要说明:这仅在客户端执行验证.如果您知道自己在做什么,则可以覆盖它,因此请确保您仍然验证使用此表单发送的输入在服务器上是否有效.
我不是Ruby人,但通过Simple Form文档阅读,我认为这应该有效:
<%= simple_form_for @transaction do |f| %>
<%= f.input :amount, input_html: { min: '0', step: 'any' } %>
<%= f.button :submit %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
假设金额是模型中的数字类型,它将自动为您输入[type = number].
simple_form 将根据模型的验证设置输入属性,这意味着您的客户端和服务器端验证将匹配并覆盖具有支持HTML5的新输入类型和属性的花哨的现代浏览器的用户,以及不支持HTML5的新输入类型和属性的用户.
例如,给定此模型:
class Purchase < ActiveRecord::Base
validates :amount, numericality: { greater_than_or_equal_to: 1 }
end
Run Code Online (Sandbox Code Playgroud)
而这种观点:
<%= simple_form_for Purchase.new do |f| %>
<%= f.input :amount %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
生成的标记看起来像这样(为清楚起见,我删除了一些属性):
<form …>
<div>
<label for="purchase_amount">Amount</label>
<input id="purchase_amount" name="purchase[amount]"
min="1" step="1" type="number" />
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
如另一个答案所述,如果要覆盖默认属性,可以input_html在调用时使用该选项#input:
<%= simple_form_for Purchase.new do |f| %>
<%= f.input :amount, input_html: { min: 0 } %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
为了使@georgebrock起作用,在simple_form.rb(或您使用的任何名称,可以是simple_form_bootstrap.rb)中,您需要更改:
b.optional :min_max
Run Code Online (Sandbox Code Playgroud)
至:
b.use :min_max
Run Code Online (Sandbox Code Playgroud)
对于用于绘制输入的包装器。
“可选”表示简单形式将使用该组件,但不会自动查找,使您可以在输入中手动指定:min和:max参数。
| 归档时间: |
|
| 查看次数: |
15065 次 |
| 最近记录: |