Saving enum from select in Rails 4.1 Saving enum from select in Rails 4.1 ruby ruby

Saving enum from select in Rails 4.1


Alright, so apparently, you shouldn't send the integer value of the enum to be saved. You should send the text value of the enum.

I changed the input to be the following:

f.input :color, :as => :select, :collection => Wine.colors.keys.to_a

Which generated the following HTML:

<select id="wine_color" name="wine[color]">  <option value=""></option>  <option value="red">red</option>  <option value="white">white</option>  <option value="sparkling">sparkling</option></select>

Values went from "0" to "red" and now we're all set.


If you're using a regular ol' rails text_field it's:

f.select :color, Wine.colors.keys.to_a

If you want to have clean human-readable attributes you can also do:

f.select :color, Wine.colors.keys.map { |w| [w.humanize, w] }


No need converting the enum hash to array with to_a. This suffice:

f.select :color, Wine.colors.map { |key, value| [key.humanize, key] }


The accepted solution didn't work for me for the human readable, but I was able to get it to work like this:

<%= f.select(:color, Wine.colors.keys.map {|key| [key.humanize, key]}) %>

This was the cleanest, but I really needed to humanize my keys:

<%= f.select(:color, Wine.colors.keys) %>