Вызов en.yml констант из представлений - PullRequest
0 голосов
/ 18 июня 2019
Rails 5.2
SimpleForm

Я просматриваю исходный код примера 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 ]

1 голос
/ 18 июня 2019

Я извлек SimpleForm документация на самом деле User::COLOR является константой в user модели, не загружающей ее из 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]

, чтобы вы могли использовать константу LABELS черезвы приложение.

1 голос
/ 18 июня 2019

Допустим, у вас есть эта 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"]
...