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

def destroy
    @post = Post.find(params[:post_id])
    @comment = @post.comments.find(params[:id])
    @comment.destroy
    redirect_to post_path(@post)
end 
4

2 に答える 2

1

それはルーティングに関係しています。/comments/:id などのコントローラーのみをルーティングする場合は、params[:id] を使用してパラメーターを取得するだけで済みますが、複数のコントローラーと複数の ID が含まれていてアクセス可能である場合は、次のようになります。 /posts/:id/comments/:comment_id :アクセスする :id の混乱を避けるため。

def destroy
    @post = Post.find(params[:id])
    @comment = @post.comments.find(params[:id])
    @comment.destroy
    redirect_to post_path(@post)
end 

Rails はどの :id を取得するかを認識していないため、上記のコードは非常に問題になります。

于 2012-10-11T15:39:12.780 に答える
0

ここに CommentsController の一部が表示されていると思います。そして、各コメントは投稿に属していると仮定します。したがって、idここではコメント (モデル) がpost_id参照され、投稿は参照されます。Comment および Post モデルを詳しく調べてください。

于 2012-10-11T15:35:37.943 に答える