Default value for input with simple_form

Ruby on-RailsRuby on-Rails-4ErbSimple Form

Ruby on-Rails Problem Overview


im trying to do default value for input

works ok:

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

but i need f.input not f.input_field

<%= f.input :quantity %> 


  • im trying it with standard html value - but after unsucessfull validation quantity is overriden by 1 - undesired

      <%= f.input :quantity, input_html: {value: '1'} %>
    
  • when i remove value and validation is unsucessfull quantity is populated - everything is ok

      <%= f.input :quantity %>
    

how to solve this ? is there any alternative like in f.input_field - :default ? or there is any other solution with value ?

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

You can try with something like this:

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

Solution 2 - Ruby on-Rails

You can use the selected option of simple_form:

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

Solution 3 - Ruby on-Rails

try this:

= f.input : quantity, input_html: { value: (f.object.quantity.present?) ? f.object.quantity : '1' }

Solution 4 - Ruby on-Rails

This is an old question...but, none of provided answers seem acceptable to me. The best way to do this is to set the value in the controllers new action.

 def new
   WizBang.new(quantity: 1)

This will assign the objects quantity key to value 1 in the new action. The edit action should rely on the object's persisted value, or a params value if validation failed and the form reloaded. The other answers will force the quantity to 1 on edit, even if the user initially saved nil (if you allow nil). Not ok. I would not allow nil, but would include a 0 option in the quantity field.

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

much cleaner.

Solution 5 - Ruby on-Rails

You can do

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

Nowadays, leaving off the input_html key.

Solution 6 - Ruby on-Rails

Now sure how a duplicate Question's answers get referenced, but I am sharing an Answer I just left on a question I flagged as a duplicate.

Here is a summary for this question:

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

can become:

 # 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

This leaves the management of the data and its defaults in the controller instead of sprinkled throughout the HTML

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionpatieView Question on Stackoverflow
Solution 1 - Ruby on-RailsOleg HaidulView Answer on Stackoverflow
Solution 2 - Ruby on-RailsStefan LyewView Answer on Stackoverflow
Solution 3 - Ruby on-RailsKiry MeasView Answer on Stackoverflow
Solution 4 - Ruby on-RailshellionView Answer on Stackoverflow
Solution 5 - Ruby on-RailsemptywallsView Answer on Stackoverflow
Solution 6 - Ruby on-RailsSMAGView Answer on Stackoverflow