从视图中调用en.yml常量

时间:2019-06-17 23:02:15

标签: ruby-on-rails simple-form

Rails 5.2
SimpleForm

我正在查看sample-form_bootstrap的源代码,以了解有关Rails的更多信息。

在en.yml文件中,我看到:

  simple_form:
    labels:
      user:
        email: Email
        first_kiss: First kiss
    hints:
      user:
        name: Text input example
        email: We'll never share your email with anyone else.
        password: Password input example
        color: Collection as inline radio buttons example
        fruit: Collection as inline check boxes example
    options:
      user:
        color:
          red: Red
          pink: Pink
          violet: Violet
          indigo: Indigo
          blue: Blue
          teal: Teal
          green: Green
          yellow: Yellow
        fruit:
          apple: Apple
          banana: Banana
          cherry: Cherry
          coconut: Coconut
          grape: Grape
          lime: Lime
          mango: Mango
          orange: Orange
          pear: Pear
          pineapple: Pineapple

如果我这样做:

User::COLOR

我得到:

 [:red, :pink, :violet, :indigo, :blue, :teal, :green, :yellow]

但是,如果我尝试类似的操作:

SimpleForm::LABELS

我收到未初始化的常量错误SimpleForm :: LABELS

从我的观点(尤其是集合)来看,如何从en.ym调用常量的规则是什么?

2 个答案:

答案 0 :(得分:1)

假设您具有以下en.yml结构:

en: simple_form: options: user: role: admin: 'Administrator' editor: 'Editor'

对于收藏集,您可以使用此f.input :role, collection: [:admin, :editor]SimpleForm#I18n

上有完整的指南

此外,您可以直接解析YML

require 'yaml'
thing = YAML.load_file('en.yml') # Assuming your en.yml file here.
puts thing["simple_form"]["labels"]

答案 1 :(得分:1)

我签出了SimpleForm文档,实际上User::COLORuser模型中是一个常量,而不是从en加载。

您会得到未初始化的常量错误SimpleForm :: LABELS ,因为上面没有定义常量。

如果要将它们定义为常量并在视图中使用它们,可以执行以下操作:

app_config.rb中,首先像这样读取en.yml文件

info = Rails.root.to_s + '/config/locales/en.yml'
data = YAML.load_file(info).deep_symbolize_keys!

然后定义一个类似下面的常量

LABELS = data[:simple_form][:labels]

以便您可以在整个应用程序中标记常量。