简单forms输入的最小值

我想用SImpleForm创建一个简单的货币输入。

因此,money字段应该具有最小值0,因此用户不能输入小于0的值。

但是我不知道如何用简单的forms定义最小值。

我想知道是否有可能。

非也! 您想要的表单的(简化)HTML看起来像这样:

注意输入字段上的两个非常重要的属性: min设置为0,因为你不允许负数, step设置为any ,因为你想允许小数。如果你只想要美元金额,你例如,可以设置step="1" 。 此外,如果您想设置最大值,您可以使用max属性。

重要说明:这仅在客户端执行validation。 如果您知道自己在做什么,可以覆盖它,因此请确保您仍然validation使用此表单发送的输入在服务器上是否有效。

我不是Ruby人,但通过Simple Form文档阅读,我认为这应该有效:

 <%= simple_form_for @transaction do |f| %> <%= f.input :amount, input_html: { min: '0', step: 'any' } %> <%= f.button :submit %> <% end %> 

假设金额是模型中的数字类型,它将自动为您输入[type = number]。

simple_form将根据模型的validation设置输入属性,这意味着您的客户端和服务器端validation将匹配并覆盖具有支持HTML5的新输入类型和属性的花哨的现代浏览器的用户,以及具有不支持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 %> 

生成的标记看起来像这样(为清楚起见,我删除了一些属性):

 

如另一个答案所述,如果要覆盖默认属性,可以在调用#input时使用input_html选项:

 <%= simple_form_for Purchase.new do |f| %> <%= f.input :amount, input_html: { min: 0 } %> <% end %> 

对于@ georgebrock的工作答案,在simple_form.rb(或您使用的任何名称,可能是simple_form_bootstrap.rb)中,您需要更改:

 b.optional :min_max 

至:

 b.use :min_max 

对于用于绘制输入的包装器。

“可选”表示简单表单将使用该组件,但不会自动查找,让您手动指定输入上的:min和:max params。

@ alexander-s的答案通常是正确的。

但是,我遇到了simple_form_boot.rb由simple_form_bootstrap.rb运行的问题,他们指示你不要改变。 它列出了b.optional :minmax很多地方。

我没有使用@ alexander-s提到的b.use :minmax的全局设置

 <%= f.input :amount, minmax: true %> 

这更好,因为它重用了模型中设置的最小数字。