2010-11-22 4 views
0

Je continue de recevoir Message attendu, a obtenu une erreur de chaîne. Si quelqu'un peut m'aider, merci d'avance.ActiveRecord :: AssociationTypeMismatch dans CommentsController # create

<% form_for :comment, :url=>{:controller=>"comments", :action=>"create"} do |f|%> 
<p> 
<%= f.label :body, "New Comment"%><br /> 
<%= f.text_area :body %> 
<%= f.hidden_field :post, :value=>@post.id %> 
</p> 
<p><%= f.submit "Add Comment"%></p> 
<% end%> 

def create 
    @comment = Comment.create(params[:comment]) 
    if @comment.save 
     redirect_to(:controller=>"posts" ,:action=>'index') 
    else 
     redirect_to(:controller=>"posts" ,:action=>'show', :id=>"post.id") 
    end 
end 

Répondre

0

Tout d'abord, vous ne devriez pas changer post.id à @post.id (et peut-être créer un objet post)?

1

Votre deuxième redirect devrait être:

redirect_to(:controller=>"posts" ,:action=>'show', :id=> @comment.post.id) 

Bien que, en regardant cela, vous pouvez certainement utiliser de meilleurs modèles pour nettoyer les choses. Si vous utilisez des itinéraires RESTful, je changerais votre action soit créer:

def create 
    @post = params[:id] 
    @comment = @post.comments.build(params[:comment]) 

    if @comment.save 
    redirect_to posts_url 
    else 
    redirect_to post_url(@post) 
    end 
end 

Cela vous permet de supprimer le champ caché dans votre formulaire, car il devrait être se passer par l'URL que l'ID.

+0

Cela m'a beaucoup aidé, merci! :) – okoronkwo