2012-01-15 11 views
9

Hago un blog simple sobre rieles. Tengo un modelo de publicación y un modelo de comentario. Cuando crea un comentario, si el comentario no es válido, quiero mostrar el error. ¿Cómo puedo hacer?Pase una variable desde el controlador para ver

modelo Post:

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

modelo Comentario:

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

Comentarios Controlador

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

Vista para hacer comentarios formulario:

/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' %> 

cómo pasar @comment del CommentController controlador para ver /post/show.html.erb?

Gracias de antemano.

+0

No '@post.comments', donde tiene todos los comentarios de la publicación, incluido el de nueva creación, ¿es suficiente? – clyfe

Respuesta

5

Deja render "posts/show" en lugar de redirect_to post_path(@post) en su CommentsController.

+0

tan simple! Gracias. – Mike

+0

Bienvenido. Aquí acabo de considerar su problema de no poder pasar la variable de instancia de un controlador a una vista. Eche un vistazo a la respuesta de Vapire, definitivamente necesita declarar el recurso anidado para la relación Post-Comentarios. – shime

+0

tienes en mente en routes.rb? recursos: publicar recursos: finaliza el comentario. – Mike

2
1

no debe redirigir a post_path(@post)si el comentario no es válido.

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 

y cambiar la primera línea en forma de /views/comments/_form.html.erb:

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

a:

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

continuación, debería ver mensajes de error cuando se produce un error al guardar.

Cuestiones relacionadas