我对命名空间模型中的枚举有点困惑i18n。目前我在模型 /app/media/medias.rb 中有这样的行:
enum territory: { local: 1, global: 2 }
在模态窗口 /views/media/medias/_newmedia.html.erb 我有这个:
<%= f.select :territory, Media::Medias.territories.keys.collect
{ |g| [(t'.territories.#{g.downcase}'), g] }, {}, {class:"form-control m-b"} %>
和/config/locales/models/medias.en.yml我有这个:
en:
media:
medias:
territories:
local: Local_EN
global: Global_EN
在控制台中我看到查询完成,没有引发任何错误,但我的视图没有出现。当我更改为简单Media::Medias.territories.keys
时,我会看到关键值下拉视图在我看来。 我该如何解决这个问题?谢谢!
到目前为止,我已尝试实施code from this answer。在视图中它很好地提供了翻译,但是在创建操作时我收到错误,因为它试图保存不是枚举键,而是本地化值。
解决方案
好的,在我的案例中显示为this answer is solution。如果有人需要,我的例子就是如何使用命名空间模型:
1)在 model /app/media/medias.rb
中enum territory: { local: 1, global: 2 }
def self.territory_attributes_for_select
territories.map do |territory, _|
[I18n.t("activerecord.attributes.#{model_name.i18n_key}.territories.#{territory}"), territory]
end
end
2)然后查看部分 /views/media/medias/_newmedia.html.erb
<%= f.select :territory, options_for_select(Media::Medias.territory_attributes_for_select),
{}, {class:"form-control m-b"} %>
3)最后在 /config/locales/en.yml
en:
activerecord:
attributes:
media/medias: #Important! This is how you define namespaced model!
territories:
local: "Local EN"
global: "Global EN"
我可以确认在视图中显示正确的区域设置,然后在创建操作中保存值。