Rails批量分配安全性错误

时间:2012-09-23 06:54:11

标签: ruby-on-rails ruby-on-rails-3

我正在关注一个伟大的intro level tutorial to Rails,这是一次很棒的体验 - 直到我点击这个

ActiveModel::MassAssignmentSecurity::Error in CommentsController#create

Can't mass-assign protected attributes: article_id

这就是CommentsController的样子

class CommentsController < ApplicationController

    def create
        article_id = params[:comment].delete(article_id)

        @comment = Comment.new(params[:comment])
        @comment.article_id = article_id

        @comment.save

        redirect_to(article_path(@comment.article),
            :notice => "Comment added by #{@comment.author_name}.")
    end

end

根据教程,以这种方式编写create方法而不是像@comment = Comment.new(params[:comment]@comment.save那样编写是为了避免批量分配安全性错误。我认为这是由使用不同版本的rails引起的,因为我正在运行Rails 3.2.8,该教程的作者在撰写本文时正在运行Rails 3.2.2。

有人可以给我一个解决方案吗?感谢

编辑:

我用Google搜索了一下,发现你可以使用:as选项来定义类的角色,但我真的不知道我是否应该在这里使用它。我今天刚刚开始学习Rails,并且在了解了一些基础知识之后我仍然试图了解它。

EDIT2:迁移文件

class CreateComments < ActiveRecord::Migration
    def change
        create_table :comments do |t|
            t.integer :article_id
            t.string :author_name
            t.text :body
            t.timestamps
        end
    end
end

1 个答案:

答案 0 :(得分:0)

您可能需要从参数中删除:article_id密钥,而不是article_id

article_id = params[:comment].delete(:article_id)

而不是

article_id = params[:comment].delete(article_id)

Ruby不会为自我赋值抛出未定义的错误,

a = a
=> nil
b = c
=> NameError