问题
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] %>
回答1:
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...
来源:https://stackoverflow.com/questions/22095480/simple-form-collection-translation