Forçando nomes “humanizados” de campos a serem minúsculos no Rails 3
-
27-10-2019 - |
Pergunta
Até onde eu sei, a forma aceita de definir os nomes "humanizados" de campos no Rails 3 é usar locales:
# config/locales/en.yml
en:
activerecord:
attributes:
member:
username: 'username' # rather than 'Username'
No entanto, eu simplesmente quero que o Rails 3 use versões em minúsculas de seus nomes humanizados padrão.Existe uma maneira fácil e integrada de fazer isso?
Um exemplo para ajudar a esclarecer: Quando dentro de um form_for
, <%= f.label :username %>
exibe "Nome de usuário" por padrão.Eu quero que ele exiba "nome de usuário".
Solução
O auxiliar label
é padronizado para usar human_attribute_name paratransformar um atributo em um nome humano.Se você olhar a fonte, human_attribute_name
tenta algumas coisas antes de voltar para attributes.to_s.humanize
.Ele tenta a tradução primeiro e, em seguida, procura uma opção :default
no hash de opções.
Portanto, a maneira mais simples / melhor de obter a funcionalidade desejada é substituir human_attribute_name
pelo seu próprio, que fornece uma opção :default
e, em seguida, chama o original.Rails fornece uma maneira razoável de fazer esse tipo de coisa com alias_method_chain
, então ...
Já ouvi o suficiente, é só me dar a resposta!
Coloque o seguinte em qualquer arquivo em config/initializers
e reinicie seu aplicativo:
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
Outras dicas
Eu tive o mesmo problema. Eu resolvi isso via css:
Em foo.html.erb:
<%= f.label :username, :class => "my_class" %>
Em bar.css:
label.my_class {
text-transform: lowercase;
}
Eu também preferiria uma solução diferente.Mas esse é o único que consegui encontrar até agora.