Принудительное использование «очеловеченных» имен полей в Rails 3 строчными - PullRequest
2 голосов
/ 31 января 2011

Насколько я знаю, принятый способ установки "гуманизированных" имен полей в Rails 3 - это использование локалей:

# config/locales/en.yml
en:
  activerecord:
    attributes:
      member:
        username: 'username' # rather than 'Username'

Однако я просто хочу, чтобы Rails 3 использовал строчные версииего гуманизированные имена по умолчанию.Есть ли простой встроенный способ сделать это?

Пример, который поможет уточнить: когда внутри form_for, <%= f.label :username %> отображает «Имя пользователя» по умолчанию.Я хочу, чтобы он отображал "имя пользователя".

Ответы [ 2 ]

3 голосов
/ 28 апреля 2011

У меня была такая же проблема.Я решил это через css:

В foo.html.erb:

<%= f.label :username, :class => "my_class" %>

В bar.css:

label.my_class {
    text-transform:   lowercase;
}

Я бы тоже предпочел другое решение,Но пока это единственное, что мне удалось найти.

1 голос
/ 28 апреля 2011

Помощник label по умолчанию использует human_attribute_name , чтобы превратить атрибут в человеческое имя. Если вы посмотрите на источник, human_attribute_name пытается сделать несколько вещей, прежде чем вернуться к attributes.to_s.humanize. Сначала он пытается выполнить перевод, а затем ищет хэш-опцию :default.

Итак, самый простой / лучший способ получить желаемую функциональность - это переопределить human_attribute_name своим, который предоставляет опцию :default, а затем вызывает оригинал. Rails предоставляет разумный способ сделать подобное с alias_method_chain, так что ...

Я слышал достаточно, просто дай мне ответ!

Поместите следующее в любой файл в config/initializers и перезапустите приложение:

module ActiveModel
  module Translation
    def human_attribute_name_with_foo attribute, options = {}
      human_attribute_name_without_foo attribute, options.merge( :default => attribute.humanize.downcase )
    end

    alias_method_chain :human_attribute_name, :foo
  end
end
...