2014-09-22 72 views
0

我已经按照教程信的信件,我仍然得到一个禁止的属性错误。我有轨4.1.4和红宝石2.1.2。这里是我的新文章的控制器方法入门Rails官方教程,ForbiddenAttributesError

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 

我敢肯定,这是我输错只有一个单数/复数的事情或一些愚蠢的事,但我一直在这一个愚蠢的错误比多小时了,所以任何帮助表示赞赏

+0

在Github上砍了在第一线,你需要改变'PARAMS [:文章]'来'article_params'。 – 2014-09-22 01:02:44

+0

非常感谢!我需要让他们知道,以便他们可以在教程中解决这个问题。让这个答案,我会标记为这样 – SeanIvins 2014-09-22 01:14:27

回答

2

在第一行中,您需要将params[:article]更改为article_params

Rails 4+拒绝初始化活动模型对象,除非传递给它的属性已被明确列入白名单。这是一种被称为strong parameters的Rails安全功能,它被引入以更好地防止mass assignment-“一种计算机漏洞,其中Web应用程序中的活动记录模式被滥用以修改用户通常不被允许访问的数据项”。

params[:article]是通过POST请求传递给create动作的未分类哈希,通过POST请求到/articles。它可能包含以非预期和意想不到的方式设置Article模型属性的数据。 Rails 4+通过抛出一个异常并且不允许这样的代码运行而为您提供帮助,而不是仅仅将安全责任留给您。

article_params是对示例ArticlesController中列出的private方法的调用。请注意,它明确要求参数:article,并且只允许:title:text属性。这可以防止恶意用户创作特别具有攻击性的文章,然后通过将该人的:user_id连同攻击性文章一起发布,以无辜者的名义发布。

对于质量分配的一个真实世界的例子利用Rails中,这里是一个勘误安全article总结了2012年