我已经按照教程信函进行了操作,但我仍然遇到禁用属性错误。我有rails 4.1.4和ruby 2.1.2。这是我的新文章的控制器方法
def create
@article = Article.new(params[:article])
if @article.save
redirect_to @article
else
render 'new'
end
end
private
def article_params
params.require(:article).permit(:title, :text)
end
我确定它只是一个单数/复数的错误输入或愚蠢的东西,但我现在已经在这一个愚蠢的错误超过一个小时了,所以任何帮助都会受到赞赏< / p>
答案 0 :(得分:2)
在第一行中,您需要将params[:article]
更改为article_params
。
Rails 4+拒绝初始化Active Model对象,除非传递给它的属性已明确列入白名单。这是一个称为strong parameters的Rails安全功能,用于更好地防范mass assignment - &#34;一个计算机漏洞,其中滥用Web应用程序中的活动记录模式来修改用户的数据项通常不应允许访问&#34;。
params[:article]
是通过对create
的POST请求传递给/articles
操作的未经过清理的哈希。它可能包含以非预期和意外方式设置Article
模型属性的数据。 Rails 4+通过抛出异常而不允许运行此类代码来帮助您,而不是仅仅依赖于您的安全责任。
article_params
是对您的示例private
中列出的ArticlesController
方法的调用。请注意,它明确要求:article
参数,并且只允许:title
和:text
属性。这可以防止恶意用户创作一篇特别令人反感的文章,然后通过将该人:user_id
和攻击性文章一起传递给一个无辜的个人姓名。
对于Rails中大规模分配漏洞的真实世界示例,这里有一个勘误表article总结了2012年的Github黑客攻击。