Ruby on Rails: Comment rester sur la même page si le post n'est pas sauvegardé?
def create
@addpost = Post.new params[:data]
if @addpost.save
flash[:notice] = "Post has been saved successfully."
redirect_to posts_path
else
flash[:notice] = "Post can not be saved, please enter information."
end
end
Si le post n'est pas enregistré alors qu'il redirige vers http://0.0.0.0:3000/posts , mais j'ai besoin de rester sur la page, avec des champs de saisie de texte de sorte que l'utilisateur peut entrer des données.
modèle post
class Post < ActiveRecord::Base
has_many :comments
validates :title, :presence => true
validates :content, :presence => true
validates :category_id, :presence => true
validates :tags, :presence => true
end
nouvelle méthode
def new
@arr_select = { 1=>"One",2=>"Two" ,3=>"Three" }
@categories_select = Category.all.collect {|c| [ c.category_name, c.id ] }
end
nouveau.html.erb
<h3>Add post</h3>
<%= form_tag :controller=>'posts', :action=>'create' do %>
<%= label :q, :Title %>
<%= text_field :data, :title, :class => :addtextsize %><br/>
<%= label :q, :Content %>
<%= text_area :data, :content, :rows=>10 , :class => :addtextarea %><br/>
<%= label :q, :Category %>
<%= select :data, :category_id, @categories_select %><br/>
<%= label :q, :Tags %>
<%= text_field :data, :tags, :class => :addtextsize %><br/>
<%= label :q, :Submit %>
<%= submit_tag "Add Post" %>
<% end %>
Que dois-je faire ?
source d'informationauteur shibly
Vous devez vous connecter pour publier un commentaire.
flash.now
avecrender
est ce que vous cherchez.Aussi au lieu de
vous pouvez simplement écrire
et il fera la même chose. Il fonctionne uniquement avec les
redirect_to
bien, pas avec les de rendre!Quelque chose comme cela devrait faire ce que vous voulez:
Mise à JOUR: Vous avez mis à jour votre question si je mettre à jour ma réponse. Rendre est la bonne façon de le faire. Cependant, il semble que vous charge de certaines catégories et certains autres de la collection de choses dans votre
new
méthode. Ces mêmes variables d'instance devrait être disponible à votrecreate
méthode. La façon la plus propre de le faire est de les mettre dans une autre méthode, et cette méthode utilisé comme unbefore_filter
appliqué à la foiscreate
etnew
. Quelque chose comme ceci:Alors votre
new
méthode est à peu près vide, et en appelantrender :new
dans votrecreate
méthode devrait fonctionner.Hey cette réponse, c'est super en retard, mais j'ai pensé ajouter pour quelqu'un qui vient à travers. Probablement la solution la plus simple pour ce que vous voulez atteindre est d'ajouter: vrai pour toutes les entrées de formulaire que vous souhaitez remplir. E. g
De cette façon, le formulaire doit être soumis SEULEMENT si ces champs ont été correctement remplis et si ce n'est une erreur de message flash pop up sur le terrain qu'il a besoin d'être complété. Le flash par défaut des messages pop-up peut être personnalisé aussi, Google comment le faire.
De cette façon, vous pouvez supprimer l'autre rediriger tous ensemble dans votre méthode de création comme il ne sera jamais arriver à ce point, et seulement si le sauver, flash succès etc.