2012-01-15 3 views
9

Je fais un blog simple sur les rails. J'ai un modèle Post et un modèle Comment. Lorsque vous créez un commentaire, si le commentaire n'est pas valide, je souhaite afficher l'erreur. Comment faire?Passer une variable du contrôleur pour voir

modèle Post:

#/models/post.rb 
class Post < ActiveRecord::Base 
    has_many :comments 
    validates :title, :content, :presence => true 
end 

modèle Commentaire:

#/models/comment.rb 
class Comment < ActiveRecord::Base 
    belongs_to :post 
    validates :name, :comment, :presence => true 
end 

Commentaires Contrôleur

class CommentsController < ApplicationController 
    def create 
    @post = Post.find(params[:post_id]) 
    @comment = @post.comments.create(params[:comment]) 
    redirect_to post_path(@post) 
    end 
end 

Voir formulaire de commentaires:

/views/comments/_form.html .erb

<%= form_for([@post, @post.comments.build]) do |f| %> 
    <% if @comment.errors.any? %> 
    error! 
    <% end %> 
    <div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
    <%= f.label :comment %><br /> 
    <%= f.text_area :comment %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

/views/posts/show.html.erb

<%= render 'comments/form' %> 

Comment passer @comment du contrôleur CommentController pour voir /post/show.html.erb?

Merci d'avance.

+0

Ne correspond pas '@post.commentaires », où vous avez tous les commentaires de la publication, y compris celui qui vient d'être créé, suffit? – clyfe

Répondre

5

Mettez render "posts/show" au lieu de redirect_to post_path(@post) dans votre CommentsController.

+0

si simple! Merci. – Mike

+0

Bienvenue. Ici, je viens de considérer votre problème de ne pas pouvoir passer la variable d'instance d'un contrôleur à une vue. Jetez un oeil à la réponse de Vapire, vous devez absolument déclarer la ressource imbriquée pour la relation Post-Commentaires. – shime

+0

que vous avez en tête dans routes.rb? ressources: poster des ressources: fin des commentaires. – Mike

2
1

vous ne devriez pas redirigent à post_path(@post)si le commentaire est pas valide.

class CommentsController < ApplicationController 
    def create 
    @post = Post.find(params[:post_id]) 
    @comment = @post.comments.new(params[:comment]) 

    if @comment.save 
     redirect_to post_path(@post), notice: 'Comment was successfully created.' 
    else 
     render action: "posts/show", error: 'The comment you typed was invalid.' 
    end 
    end 
end 

et modifier la première ligne de forme /views/comments/_form.html.erb de:

<%= form_for([@post, @post.comments.build]) do |f| %> 

à:

<%= form_for([@post, (@comment || @post.comments.build)]) do |f| %> 

alors vous devriez voir les messages d'erreur quand il ne parvient pas à sauver.

Questions connexes