在模型中添加注释并在Rails中添加强参数4引发错误

时间:2013-06-18 21:45:35

标签: ruby-on-rails ruby-on-rails-4

我昨晚开始玩Rails 4。我正在制作一个简单的博客类型的应用程序,以熟悉一些变化。我的帖子使用默认的脚手架。

我决定在没有脚手架的情况下添加评论,当我尝试在帖子上保存评论时出现此错误:

ActiveModel::ForbiddenAttributesError in CommentsController#create

请求参数错误页面:

{"utf8"=>"✓",
 "authenticity_token"=>"jkald9....",
 "comment"=>{"commenter"=>"Sam",
 "body"=>"I love this post!"},
 "commit"=>"Create Comment",
 "post_id"=>"1"}

这是评论控制器的创建动作:

    class CommentsController < ApplicationController
        def create
            @post = post.find(params[:post_id])
            @comment = @post.comments.create(params[:comment])
            redirect_to post_path(@post)
        end

        private

        def comment_params
          params.require(:comment).permit(:commenter, :body, :post_id)
        end
    end

以下是我的评论的基本迁移。

class CreateComments < ActiveRecord::Migration
  def change
    create_table :comments do |t|
      t.string :commenter
      t.text :body
      t.references :post, index: true

      t.timestamps
    end
  end
end

我对强类型params做错了什么?或者在Rails 4中还有其他一些我失踪的东西?

2 个答案:

答案 0 :(得分:4)

有点疏忽,但我想我会回答这个问题,以防其他人正在努力将类似的Rails 3代码移植到Rails 4。

您需要将comment_params传递到质量分配中,如下所示:

@comment = @post.comments.create(comment_params)

答案 1 :(得分:1)

我通过将comments_controller创建函数编辑为

来解决这个问题
def create
    @post = Post.find(params[:post_id])
    @comment = @post.comments.create(params[:comment].permit(:commenter, :body))
redirect_to post_path(@post)
end

请注意

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

最好的问候