Rails 5:i18n用于命名空间模型的枚举

时间:2017-02-12 07:41:48

标签: ruby-on-rails ruby enums

我对命名空间模型中的枚举有点困惑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"

我可以确认在视图中显示正确的区域设置,然后在创建操作中保存值。

0 个答案:

没有答案