2012-02-06 3 views
2

Je rends un formulaire en utilisant form_for avec un modèle existant. Je voudrais soumettre ce modèle et faire en sorte que la prochaine action à effectuer soit l'action «créer». Le docs ont cet exemple:Obtenir l'étiquette du bouton de soumission "Créer un modèle" au lieu de "Mettre à jour le modèle" à l'intérieur de la forme_dans les rails

<%= form_for @post do |f| %> 
    <%= f.submit %> 
<% end %> 

Et dire « Dans l'exemple ci-dessus, si @post est un nouveau record, il utilisera « Créer un message » que soumettre étiquette de bouton, sinon, il utilise « Mise à jour Post ». "

Je suis relativement nouveau sur les rails et je ne sais pas quoi faire des choses suivantes dans les docs sur la personnalisation en utilisant I18n. Comment puis-je obtenir le bouton de soumission pour utiliser "Créer" lorsqu'il existe un enregistrement existant?

Clarification. . .

I la forme_for est en cours de rendu hors de la nouvelle action, mais je lui passe un objet existant, de sorte que les champs peuvent être prépolulés. Je veux que ça passe à l'action create, mais ça va à la mise à jour à la place.

Mise à jour. . .

Je me rends compte maintenant que le problème est avec le formulaire et pas le soumettre, mais n'ont pas encore trouvé comment modifier le formulaire pour qu'il envoie à l'action de création.

+0

Attendez, pourquoi ne pas simplement envoyer alors à l'action 'new' au lieu de l'action' edit' alors? Si vous «éditez» un post, c'est bizarre de ne pas vouloir «mettre à jour» – Azolo

+0

@Azolo Je suis dans la nouvelle action, en essayant de le faire passer à l'action d'édition. Ajout d'une mise à jour pour clarification. . – John

Répondre

3

http://api.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html#method-i-submit

Il y a trois options, vous pouvez le remplacer dans le fichier de traduction (config/locales/en.yml).

en: 
    helpers: 
    submit: 
     create: "Create %{model}" 
     update: "Create %{model}" 

Vous pouvez également spécifier une valeur dans la méthode de soumission.

f.submit("Create Post") 

Ou, vous pouvez conserver le fichier de traduction car il est par défaut et faire:

f.submit(t('helpers.submit.create')) 
+0

En utilisant la seconde option, f.submit ("Créer un message"), j'obtiens toujours un PUT à/posts /: id. . . Au lieu de cela, j'aimerais avoir un POST à ​​/ posts – John

0

form_for mettra à jour un enregistrement existant au lieu de créer, donc en gros vous avez à une alimentation nouvel enregistrement. La meilleure façon de faire cela est dans le contrôleur avec record.dup. Quelque chose comme

@post = @existing_post.dup 

dup crée une copie peu profonde, vous permettant de save comme un nouveau record.

Questions connexes