2010-11-22 11 views
0

私はポストを期待して、文字列エラーを取得し続けます。誰かが私に事前に感謝を助けることができれば。すべてのCommentsController#でActiveRecord :: AssociationTypeMismatchを作成

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

答えて

0

まず、あなたは@post.idpost.idを変更しないでください(そしておそらくポストオブジェクトを作成しますか)?

1

あなたの第二のリダイレクトは次のようになります、これを見て、あなたは間違いなく物事をクリーンアップするためにいくつかのより良いパターンを使用することができ

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

が。あなたがRESTfulなルートを使用している場合、私はあなたのするアクションを作成して変更します

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 

これは、IDとURLを通過した取得する必要がありますので、あなたのフォームで隠しフィールドを削除することができます。

+0

これは私に多くの助けになりました、ありがとうございます! :) – okoronkwo

関連する問題