2014-09-22 85 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年