![](/img/trans.png)
[英]Rails i18n - How to translate model in fields_for that has_one inherited model
[英]Rails i18n - How to translate enum of a model
我有以下型号:
class Person < ActiveRecord::Base
enum gender: [:female, :male]
...
end
然后我将性别选择添加到其表单中,如下所示:
<%= form_for ([@person]) do |f| %>
...
<div class="form-group">
<%= f.collection_radio_buttons :gender, Person.genders, :first, :first %>
</div>
...
<% end %>
但不是将常量显示为字符串,而是将其翻译为葡萄牙语。
我已经尝试将它添加到人们的pt.yml文件中但是没有用。
pt:
activerecord:
attributes:
female: Feminino
male: Mascúlino
我知道这个问题非常类似于如何使用i18n和Rails 4枚举,但这个问题已经标记为已回答,我正在寻找更好,更简单的解决方案......
感谢您抽出宝贵时间帮助我:)
阅读如何使用i18n与Rails 4枚举答案更仔细我来到这个解决方案:
yml
文件应如下所示:
pt:
activerecord:
attributes:
person/gender:
female: Feminino
male: Mascúlino
enum
的方法,因为没有任何方法可以一次翻译整个enum
。 Rails只有翻译给定键的值的方法,即People.human_attribute_name(“gender.female”)。 好的,我们将创建一个新方法,但我们应该把它放在哪里?
我认为Helpers
是放置它的最佳位置,因为我正在更改枚举值以便轻松地将它们附加到form collection
,尽管大多数答案都建议将它放在Models
。
现在我的person_helper.rb
看起来像这样:
def human_attribute_genders
Hash[Person.genders.map { |k,v| [k, Person.human_attribute_name("gender.#{k}")] }]
end
我的view
:
<%= f.collection_radio_buttons :gender, human_attribute_genders, :first, :second %>
很简单,它工作得很好!
如果有人有任何改进我的解决方案的建议,我很乐意听到你的意见:)
例如,我可以像这样将方法提取到application_helper.rb
:
def human_attribute_enum(model_name, enum_attr, attr_name)
Hash[enum_attr.map { |k,v| [k, I18n.t("activerecord.attributes.#{model_name}/#{attr_name}.#{k}")] }]
end
但它需要在view
传递很多参数......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.