2014-02-21 62 views
0

我使用rails4 and ruby2.0.0未獲取禁止的屬性錯誤。

當我做

def create 
    @post = Post.create(params[:post]) 
    redirect_to posts_path 
end 

然後我得到forbidden attribute error,這是確定的 - 我知道這種行爲意味着我必須允許PARAMS像params.require(:post).permit(:title,:content)

但是,當我做到這一點

def create 
    @post = Post.create(:title=>params[:post][:title], :content=>params[:post][:content]) 
    redirect_to posts_path 
end 

它不要求允許參數,即我沒有得到任何禁止的屬性錯誤,它將數據庫中的帖子記錄保存。

任何人都可以請解釋我這種奇怪的行爲,爲什麼第二個不需要params允許?

回答

0

這裏的事情是,params不只是一個散列,它是一個ActionController :: Parameters類的實例,它主要表現爲一個散列,但也響應#permitted?方法,#需求等。因此,當你撥打電話

Post.create(params[:post]) 

Rails內部調用#permitted?方法在params [:post]上返回false,並且你得到了禁止的屬性錯誤。 但是當你手動PARAMS

:title=>params[:post][:title], :content=>params[:post][:content] 

你得到簡單的Hash對象,不實施任何此類行爲中提取屬性,以及後保存成功。

More in Rails documentation on ActionController::Parameters

相關問題