我有一份表格可以提交有关帖子的评论 提交评论后,应将用户重定向到帖子。
点击“提交”按钮后出现以下错误:
CommentsController中的NameError#为CommentsController创建未定义的局部变量或方法`post'
错误指向评论控制器中的以下行:
redirect_to post_path(@post)
这是我的comments_controller.rb
:
class CommentsController < ApplicationController
before_action :authenticate_user!
def create
@topic = Topic.find(params[:topic_id])
@post = @topic.posts.find(params[:post_id])
@comment = Comment.new(comment_params)
@comment.post = @post
redirect_to post_path(@post)
end
private
def comment_params
params.require(:comment).permit(:title, :body)
end
end
这是我的路线档案:
Rclone::Application.routes.draw do
get "comments/create"
devise_for :users
resources :users, only: [:update]
resources :topics do
resources :posts, except: [:index] do
resources :comments, only: [:create]
end
end
get '/posts/:id/comments', to: 'posts#show'
get 'about' => 'welcome#about'
root to: 'welcome#index'
end
我在路线档案上做错了什么?
答案 0 :(得分:1)
Comment.new
不会主持或创建帖子。你需要做@comment.save
。还可以使用pry
和pry-nav
gem来调试此类错误。 pry
将停止执行您找到binding.pry
的程序。从那时起,您可以逐行执行您的程序。只需在要停止执行的位置之前插入binding.pry
一行。
示例
def create
binding.pry
@topic = Topic.find(params[:topic_id])
检查你的参数哈希,你会发现你的错误。我的猜测是topic_id
或post_id