我正在关注一个伟大的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,并且在了解了一些基础知识之后我仍然试图了解它。
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
答案 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