即时尝试为输入执行默认值
工作正常:
<%= 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那样的选择 - :默认? 还是有其他有价值的解决方案?
答案 0 :(得分:132)
你可以尝试这样的事情:
<%= f.input :quantity, input_html: {value: f.object.quantity || '1'} %>
答案 1 :(得分:1)
您可以使用simple_form的selected
选项:
<%= f.input :quantity, selected: f.object.quantity || '1' %>
答案 2 :(得分:1)
试试这个:
= f.input : quantity, input_html: { value: (f.object.quantity.present?) ? f.object.quantity : '1' }
答案 3 :(得分:1)
你可以
<%= f.input :quantity, value: f.object.quantity || '1' %>
现在,不用按input_html
键。
答案 4 :(得分:0)
这是一个古老的问题...但是我提供的答案似乎都不可接受。最好的方法是在控制器的new动作中设置值。
def new
WizBang.new(quantity: 1)
这将在新操作中将对象数量键分配给值1。如果验证失败并重新加载了表单,则编辑操作应依赖于对象的持久值或params值。即使用户最初保存nil(如果允许nil),其他答案也会将数量强制为1。不好。我不允许为零,但在数量字段中应包含0选项。
f.input :quantity, collection (0..100)
更清洁。
答案 5 :(得分:0)
现在确定如何引用重复的问题答案,但是我正在分享一个Answer,我刚刚留下了一个我标记为重复的问题。
以下是此问题的摘要:
# 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中