Question

Using the translation example here that translates the :male, :female options using Ruby I18n, the form will be:

View: _form.html.erb

<%= f.input :gender, collection: [:male, :female] %>

Generated HTML:

<option>Male</option>
<option>Female</option>

So when submitting, the form uses the translated values.

How can I change the view code to submit ["male", "female"] values instead of ["Male", "Female"]?

My best shot so far is pretty ugly:

<%= f.input :gender, collection: [:male, :female].map{|v| [t("simple_form.options.user.gender.#{v.to_s}", v] %>
Was it helpful?

Solution

In your view, you should just use

<%= f.input :gender, collection: [:male, :female] %> 

In your yaml file, you should have

simple_form:
  options:
    user: (or defaults:)
      gender:
        male: Male
        female: Female

This should automatically translate into

<option value="male">
  Male
</option>

It is the values that will go back to the controller, not the translated words.

If not, there is something wrong...

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top