Question

Comment puis-je effectuer un rendu après avoir exécuté une action dans un contrôleur reposant au lieu de rediriger.

J'ai un contrôleur avec des actions standard et j'ai ajouté une action spéciale qui ajoute des données à la ressource en question, via un formulaire sur la page #show (Pensez aux commentaires sur un article). Je valide l’entrée du formulaire et je veux rendre l’action show en cas d’erreur et rediriger vers l’action show en cas de succès.

Je souhaite effectuer un rendu pour éviter à l'utilisateur de saisir ses informations deux fois, mais lorsque j'essaie de rendre l'action show avec une erreur dans le flash [: notice], une erreur m'indique que je ne spécifie pas d'identifiant. Lorsque je spécifie un ID, il essaie de restituer un nouveau modèle qui n'existe pas encore.

Je pense que cela devrait être aussi simple que:

def add_comment
  if my_validation?
    save the object
    redirect_to :action => "show", :id => params[:id]
  else
    render :action => "show", :id => params[:id]
  end
end

Ce n'est pas mon code, mais simplement un exemple que j'ai mis en place tout à l'heure.

Était-ce utile?

La solution

Le meilleur moyen est de re-rendre le: nouveau

def create
  @obj = TheObject.new(params[:object])
  render :action => :new unless @obj.save
end

Et dans le new.html.erb

<% form_for :obj, 
  :url => object_url(@obj), :html => {:method => :post} do |f| %>

  <%= f.text_field :name %>
<% end %>

De cette façon, les entrées du formulaire seront pré-remplies avec ce que l'utilisateur a entré.

Autres conseils

Créez un nouvel objet de données et ajoutez les valeurs du formulaire, avant de le rendre, pensez qu'il fonctionnerait alors. Si vous rencontrez toujours des problèmes, essayez de définir un booléen pour la modification de nouvelles lignes par rapport aux lignes existantes ou créez entièrement deux vues différentes.

Je l'ai déjà fait mais je ne me souviens plus très bien comment. Parfois, lorsque j’utilisais l’utilisation très typique du motif MVC, c’était presque «automagique», d’autre part (comme je devais utiliser une vieille base de données excentrique), je devais coder toute la magie moi-même; En utilisant parfois la fonction .new? (ou son nom précédent) sur l'objet ActiveRecord, d'autres fois, j'ai utilisé des "valeurs magiques" temporaires. pour ID (généralement des chaînes alphabétiques pour des valeurs d’ID non valides.

(Je m'excuse si j'ai commis des erreurs, cela fait un moment que j'ai codé le code Rails ...)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top