Rails: Como alterar o texto no botão enviar em um formulário Rails

109

Eu listei meu arquivo _form.html.erb abaixo, o que eu gostaria de fazer é mudar o texto no botão submit eu sei como fazer em html mas não tenho certeza como fazer no Rails 3

%= form_for(@faq) do |f| %>
  <% if @faq.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@faq.errors.count, "error") %> prohibited this faq from being saved:</h2>

      <ul>
      <% @faq.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :question %><br />
    <%= f.text_field :question %>
  </div>
  <div class="field">
    <%= f.label :answer %><br />
    <%= f.text_area :answer %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>
Rod Nelson
fonte

Respostas:

193

ao invés de

<%= f.submit  %>

colocar

<%= f.submit "My Submit Text" %>
Andrei S
fonte
OMG, eu não consigo acreditar que estava tão perto que estava tentando usá-lo como HTML name = "My Submit Text" obrigado, isso me deu o que eu estava procurando :)
Rod Nelson
1
Eu não posso acreditar que essa coisa tão simples não está nos documentos da API para este método .
Grant Birchmeier
4
Isso não funcionou para mim - eu tive que fazer em <%= f.submit :value => "Login" %>vez disso. (Rails 3.2.11)
cassi.lup
2
Se você quiser manter o estilo do botão, pode fazer: f.button: submit, "My Submit Text"
jonathanrz
Vale a pena ler as outras respostas que mostram como fazer alterações usando um arquivo como config/locales/en.yml
cwd
63

Se você deseja alterar todas as tags de envio de formulário de criação e atualização, essa alteração é fácil de fazer. Modifique config/locales/en.ymlassim:

en:
  helpers:
    submit:
      create: "Crear un %{model}"
      update: "Confirmar cambios al %{model} creado"
Daniel
fonte
55
Eu gosto de como você coloca frases em espanhol no idioma inglês!
graywh
Eu queria editar esta resposta, mas prefiro deixar as pessoas virem aqui e sorrir (até que encontrem um novo bug).
Arslan Ali
43

Com base na resposta de @daniel, você também pode personalizar os valores da tag de envio por modelo :

en:
  helpers:
    submit:
      model_name:
        create: "Create"
        update: "Update"

E então, em seu formulário, você pode apenas usar:

<%= f.submit %>

Veja aqui a documentação (segundo exemplo).

Nathan Kot
fonte
16

Você pode usar:

<%= f.submit 'Name of the submit button' %>

Para questões como esta, considere usar os documentos disponíveis em

Às vezes, uma pesquisa no Google como a que está abaixo ajuda:

tomeduarte
fonte
3
é muito mais fácil perguntar aqui do que tentar ler os documentos sem exemplos!
Rod Nelson de
2
Acho os documentos do Ruby muito frustrantes quando se trata de responder a perguntas específicas do tipo como-eu-faço-xxx.
Grant Birchmeier
6

Ao escrever em erb

<%= f.submit "your text" %>

ao escrever em HAML

= f.button :submit, "your text"

Em HAML, a vírgula deve estar presente após o envio, caso contrário, ocorrerá um erro.

Pulkit Agarwal
fonte
2
A vírgula não precisa estar lá, funciona para mim sem.
erb
Sim, você está certo em haml, vírgula é necessária. = f.button: submit, "your text"
Pulkit Agarwal
Usar uma vírgula gera um erro para mim (e funciona bem sem uma) no rails 4 (sem haml).
rainbowsorbet de
@naomisorbet sim, é por isso que corrigi no meu 2 comentário. Por favor, verifique.
Pulkit Agarwal
1
Sim. Eu olhei para a primeira resposta e gerou um erro. Eu simplesmente adicionei a vírgula como você disse e funcionou.
Sweet_Cherry
5

Eu tive esse problema e só precisei traduzir o nome do modelo desta forma:

pt-br:
  activerecord:
    models:
      user:
        one: "Usuário"
        more: "Usuários"

Isso também complementaria a resposta de @daniel, que me deu uma dica do que estava faltando. No entanto, suponho que a resposta de @daniel não seja realmente necessária, pois já está no rails-i18n

Claudio Shigueo Watanabe
fonte
2

Às vezes, o uso de auxiliares não é aceitável por causa do texto usado ou você precisa adicionar uma classe adicional, etc., para que possa substituir diretamente value:

<%= f.submit class: 'btn btn-primary', value: 'Login' %>

ou:

<%= f.button :submit, class: 'btn btn-primary', value: 'Login' %>

A propósito, foi citado por @ cassi.lup em comentário à resposta aceita.

Testado no Rails 4.2.3.

Arogachev
fonte
1

Por precaução, eu estava tentando com este cenário:

f.submit t('conf.begin') class: 'btn btn-outline btn-success'

Mas não deu certo, a solução foi colocar uma vírgula antes da aula (não era óbvio no início para mim):

f.submit t('conf.begin'), class: 'btn btn-outline btn-success'

Felicidades

Cris R
fonte
1

para a versão Slim, use value = "xyz" para alterar o texto de entrada de envio padrão.

Asif Ahmed
fonte
por favor elabore
JJ para Transparência e Monica
0

É simples, use

<%= f.submit 'Desired text on the button' %>
Ajey
fonte