答案 0 :(得分:21)
当然!您想要的表单的(简化)HTML看起来像这样:
<form>
<input type="number" min="0" step="any" name="amount">
</form>
请注意输入字段中两个非常重要的属性:min
设置为0,因为您不允许使用负数,step
设置为any
,因为您想要允许小数。如果你只想要美元金额,你可以设置step="1"
,例如。此外,如果您想使用max
属性设置最大值。
重要提示:这仅在客户端执行验证。如果您知道自己在做什么,可以覆盖它,因此请确保您仍然验证使用此表单发送的输入在服务器上是否有效。
我不是Ruby人,但是阅读Simple Form docs,我认为这应该有效:
<%= simple_form_for @transaction do |f| %>
<%= f.input :amount, input_html: { min: '0', step: 'any' } %>
<%= f.button :submit %>
<% end %>
假设金额是模型中的数字类型,它会自动为您输入[type = number]。
答案 1 :(得分:6)
simple_form
将根据模型的验证设置输入属性,这意味着您的客户端和服务器端验证将匹配并覆盖支持HTML5&#39;的高级现代浏览器的用户。新的输入类型和属性,以及没有旧浏览器的用户。
例如,给定此模型:
class Purchase < ActiveRecord::Base
validates :amount, numericality: { greater_than_or_equal_to: 1 }
end
这个观点:
<%= simple_form_for Purchase.new do |f| %>
<%= f.input :amount %>
<% end %>
生成的标记看起来像这样(为了清晰起见,我删除了一些属性):
<form …>
<div>
<label for="purchase_amount">Amount</label>
<input id="purchase_amount" name="purchase[amount]"
min="1" step="1" type="number" />
</div>
</form>
如另一个答案所述,如果您要覆盖默认属性,则可以在调用input_html
时使用#input
选项:
<%= simple_form_for Purchase.new do |f| %>
<%= f.input :amount, input_html: { min: 0 } %>
<% end %>
答案 2 :(得分:5)
对于@ georgebrock的工作答案,在simple_form.rb(或您使用的任何名称,可能是simple_form_bootstrap.rb)中,您需要更改:
b.optional :min_max
要:
b.use :min_max
用于绘制输入的包装器。
&#34;可选&#34;表示简单形式将使用该组件,但不会自动查找,让您手动指定输入上的:min和:max params。
答案 3 :(得分:0)
@ alexander-s的答案通常是正确的。
但是,我遇到了一个问题,即simple_form_bootstrap.rb正在运行simple_form.rb,它们指示您不要进行更改。它列出了b.optional :minmax
个地方。
我使用
来代替@ alexander-s提到的b.use :minmax
的全局设置
<%= f.input :amount, minmax: true %>
这更好,因为它可以重用模型中设置的最小值。