0
ActiveModel::ForbiddenAttributesError
Extracted source (around line #3):

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

Rails.root: C:/Users/ManU/Desktop/quick_blog  
Application Trace | Framework Trace | Full Trace

app/controllers/comments_controller.rb:4:in `create'

我应该做些什么来处理这个错误......

4

3 回答 3

5

我遇到了同样的错误,出于某种原因,他们删除了评论创建行上的 .permit 部分。如果使用原版:

@comment = @post.comments.create(params[:comment].permit(:commenter, :body))

而不是新的:

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

它工作正常。所以该文件最终看起来像:

class CommentsController < ApplicationController

  def create
    @post = Post.find(params[:post_id])
    #@comment = @post.comments.create(params[:comment])
    @comment = @post.comments.create(params[:comment].permit(:commenter, :body))
    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

end
于 2013-11-12T22:07:36.410 回答
1

ForbiddenAttributesError 与强参数有关

要么你在 Rails3 应用程序中安装了 gem,要么你错过了标记问题,而你使用的是 Rails4,gem 默认来自这里。

无论哪种方式,使用强参数,参数检查都会离开模型并传递给控制器​​。

以前你会attr_accessible :foo, :bar在模型中有类似的东西,现在你需要有类似的东西

def comment_params
  params.permit(:foo, :bar)
end

在控制器中,然后调用Comment.create!(comment_params)

于 2013-11-08T13:36:12.907 回答
1

希望这有效!(我遇到了同样的错误,以下更改对我有用)

def create
    @post = Post.find(params[:post_id])
    @comment = @post.comments.create(params[:comment].permit(:commenter, :body))
redirect_to post_path(@post)
end
于 2013-11-08T19:39:21.647 回答