61

我试图为输入做默认值

工作正常:

<%= f.input_field :quantity, default: '1' %> 

但我需要 f.input 而不是 f.input_field

<%= f.input :quantity %> 


  • 我用标准的 html 值尝试它 - 但在不成功的验证数量被 1 覆盖后 - 不受欢迎

    <%= f.input :quantity, input_html: {value: '1'} %>
    
  • 当我删除值并且验证不成功时,填充数量 - 一切正常

    <%= f.input :quantity %>
    

如何解决这个问题?有没有像 f.input_field - :default 这样的替代方法?还是有其他有价值的解决方案?

4

6 回答 6

150

你可以尝试这样的事情:

<%= f.input :quantity, input_html: {value: f.object.quantity || '1'} %>
于 2013-09-26T13:17:23.890 回答
5

您可以使用selectedsimple_form 的选项: <%= f.input :quantity, selected: f.object.quantity || '1' %>

于 2018-02-15T20:20:39.777 回答
1

尝试这个:

= f.input : quantity, input_html: { value: (f.object.quantity.present?) ? f.object.quantity : '1' }
于 2018-03-02T08:37:49.167 回答
1

这是一个老问题......但是,我似乎没有接受任何提供的答案。最好的方法是在控制器的新操作中设置值。

 def new
   WizBang.new(quantity: 1)

这会将对象数量键分配给新操作中的值 1。编辑操作应该依赖于对象的持久值,或者如果验证失败并且重新加载表单,则需要一个参数值。即使用户最初保存 nil(如果您允许 nil),其他答案也会在编辑时强制数量为 1。不好。我不允许 nil,但会在数量字段中包含一个 0 选项。

f.input :quantity, collection (0..100)

干净得多。

于 2019-02-15T19:09:52.343 回答
1

你可以做

<%= f.input :quantity, value: f.object.quantity || '1' %>

如今,离开了input_html关键。

于 2019-07-18T23:05:12.620 回答
0

现在确定如何引用重复问题的答案,但我正在分享刚刚在我标记为重复的问题上留下的答案。

以下是这个问题的摘要:

 # simple_form input
 f.input :quantity, input_html: {value: f.object.quantity || '1'}

可以变成:

 # simple_form input
 = f.input :quantity, input_html: { value: f.object.quantity_with_default }

 # Model with date_start attribute
 class Obj
   def quantity_with_default
     # based on your model, you may need this instead: try(:quantity) || '1' 
     quantity || '1' 
   end
 end

这将数据及其默认值的管理留在了控制器中,而不是散布在整个 HTML 中

于 2020-03-27T21:16:16.663 回答