【发布时间】:2014-04-21 03:51:20
【问题描述】:
【问题讨论】:
【问题讨论】:
绝对!您想要的表单的(简化)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]。
【讨论】:
in: 1.0..200.0, step: 1 之类的东西。下面的答案中显示了一个示例。
simple_form 将根据模型的验证设置输入属性,这意味着您的客户端和服务器端验证将匹配并覆盖具有支持 HTML5 新输入类型和属性的精美现代浏览器的用户,以及具有不支持的旧浏览器。
例如,给定这个模型:
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 时使用input_html 选项:
<%= simple_form_for Purchase.new do |f| %>
<%= f.input :amount, input_html: { min: 0 } %>
<% end %>
【讨论】:
validates :amount, numericality: { greater_than_or_equal_to: 1 } 准确地放在我的模型属性上,这不会将视图中的min 属性添加到amount 输入中。您能否发布一个文档链接以确认您的答案?
要使@georgebrock 的答案起作用,您需要在 simple_form.rb(或您使用的任何名称,可能是 simple_form_bootstrap.rb)中进行更改:
b.optional :min_max
收件人:
b.use :min_max
用于绘制输入的包装器。
“可选”表示简单表单将使用组件但不会自动查找,让您在输入中手动指定 :min 和 :max 参数。
【讨论】:
greater_than_or_equal_to 和less_than_or_equal_to 数字验证器选项,而不是greater_than 或less_than。
@alexander-s 的答案通常是正确的。
但是,我遇到了 simple_form.rb 被 simple_form_bootstrap.rb 运行的问题,他们指示您不要更改。它列出了b.optional :min_max 很多地方。
我没有使用@alexander-s 提到的b.use :min_max 的全局设置,而是使用了
<%= f.input :amount, min_max: true %>
这样会更好,因为它可以重复使用模型中设置的最小值。
【讨论】: