Rails FormBuilder подкласс и перевод - PullRequest
0 голосов
/ 10 ноября 2019

Я создаю FormBuilder в Rails, который должен производить чекбоксы, совместимые с materializecss, как показано в https://materializecss.com/checkboxes.html

В основном я ищу метод def check_box_with_label(name), который производит что-то вроде:

<label>
    <input type="checkbox" />
    <span>TRANSLATED LABEL FOR NAME AS DEFINED IN TRANSLATION</span>
</label>

Моя проблема - заполнить внутренний интервал переведенной версией. Использование label_tag и т. Д. Не использует перевод. Перевод находится в отдельных файлах YML, частично предоставленных devise-i18n. Я не могу найти документацию по вопросам перевода внутри подкласса FormBuilder. Как этого достичь?

1 Ответ

0 голосов
/ 11 ноября 2019

После серьезного беспокойства я обнаружил, что работает следующий подход. Однако я не уверен, элегантно это или нет. Кажется, он работает во всех местах, где я его использую.

Решение состоит в том, чтобы использовать @object_name, доступный в родительском классе FormBuilder, для поиска перевода в правильном месте.

# app/helpers/materialize_form_builder.rb
class MaterializeFormBuilder < ActionView::Helpers::FormBuilder
  def check_box_with_label(name)
    return %Q(<label>#{check_box(name)}<span>#{tr(name)}</span></label>).html_safe
  end

  private

  def tr(name)
    I18n.t(name, scope: [:activerecord, :attributes, @object_name])
  end
end
...