Texto personalizado para rails form_for label

101

Quero exibir um rótulo em form_for:

<div class="field">
  <%= f.label :name %><br />
  <%= f.text_field :name %>
</div>

Isso gera o rótulo "Nome", mas eu quero que seja "Seu nome". Como posso mudá-lo?

Paul S.
fonte

Respostas:

184

O segundo parâmetro para labelauxiliar permitirá que você defina o texto personalizado.

<%= f.label :name, 'Your Name' %>

Use a documentação do Ruby on Rails para pesquisar métodos auxiliares.

Gilaz
fonte
1
Obrigado! Você poderia me informar como posso encontrar algo assim na documentação?
Paul S.
2
Basta acessar o link acima e digitar o método que você está procurando na caixa de pesquisa. labelestá listado em ActionView::Helpers::FormBuildere ActionView::Helpers::FormHelper. ActionView::Helpers::FormBuilderé aquele em que estamos interessados, mas não há descrição. Se você olhar a declaração do método, verá que o segundo parâmetro é text. Neste exemplo, não é muito simples. Mas esse site de documentação geralmente é muito bom.
gylaz
34

Você pode especificar o texto do rótulo personalizado via i18n. Em config/locales/en.yml, e presumindo que seu modelo de usuário seja nomeado user, você pode adicionar o seguinte:

helpers:
    label:
      user:
        name: Your Name

Isso permitirá que você continue usando

<%= f.label :name %>

sem ter que codificar Your Name.

Para obter mais informações sobre i18n, consulte isto . Documentação sobre a labelreferência a este .

hjing
fonte
0

i18n com trilhos 5.2.2 funciona perfeitamente.

Traduzir rótulos , marcadores e botões em conceber formas ou outras formas.

<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
   <div class="mt-3">
     <label class="float-left"> <%= f.label t(:email) %> </label>
       <%= f.email_field :email, class: 'form-control', placeholder: t('.emailholder') %>
   </div>
   <div class="mt-3">
     <label class="float-left"> <%= f.label t(:password) %> </label>
       <%= f.password_field :password, class: 'form-control', placeholder: t('.passholder') %>
   </div>

   <div class="button">
     <%= f.button t('.signinbtn'), class: "" %>
   </div>
<% end %>

arquivo locals: config / locales / en.yml

en:
  activerecord:
    ....others

  #Found in Views/devise/seasions/new <form> <*label*>
  email: "Email"
  password: "Password"

  #Views/devise <form> <placeholder & buttom>
  devise: #if your using devise forms
    #seasions/new.html.erb
    new:
      emailholder: "enter email here"
      passholder: "enter password"
      signinbtn: "SignIn"

  ....others
RodneyH
fonte
-2

No Rails 5.1.0, a resposta aceita acima não funciona.

O primeiro parâmetro passado pode ser usado como um rótulo personalizado.

<%= f.label :mobile, "Mobile No:" %>
NemyaNation
fonte
Você poderia explicar um pouco mais, @NemyaNation? Seu exemplo parece exatamente igual à resposta aceita.
SRack
Não me lembro exatamente do @SRack, mas lembro que tentei criar uma gravadora usando aspas simples e não funcionou para mim 'Mobile No:'. Portanto, ao mudar para aspas duplas "Mobile No:", resolvi meu problema. Isso pode ter ocorrido devido à falta de tags no resto do arquivo. Não tenho certeza, mas lembro que foi o que funcionou para mim na época.
NemyaNation
4
Obrigado pela resposta @NemyaNation. Parece que pode ter sido um problema específico no seu caso, ou talvez relacionado à interpolação / formato do modelo. Ruby / Rails não diferenciou entre aspas simples e duplas neste exemplo em um .html.erbarquivo normal :)
SRack