淺談Rails 4 中Strong Parameters機制

来源:互联网 发布:mac 配置ant 编辑:程序博客网 时间:2024/04/19 04:22

要弄明白Rails 4 中Strong Parameters機制,首先我們要看看Rails3中的Parameters


在 Rails3 中創建或更新 Active Record 對象時,會有 Mass Assignment 安全問題。所以 Model 中需要列一個白名單,聲明哪些屬性可以被 parameter 的數據更新。


Rails 3



# kings_controller.rbdef create#{ name: 『David', sex:male, age: 31}@king = King.new(params[:king])if @king.saveredirect_to @kingelserender 'new'endend# king.rbclass Kingattr_accessible :nameend


Rails 4


Rails 4 引入了 Strong Parameters 的機制,Model 不再負責白名單的維護,把過濾非法屬性的職責推給了 Controller。



# kings_controller.rbdef create# new parameter { name: 『David' }@king = King.new(king_params)if @king.saveredirect_to @kingelserender 'new'endendprivatedef king_params# old parameter { name: 『David', sex:male, age: 31}# new parameter { name: 『David' }params[:king].permit(:name)end# king.rbclass Kingend 


什麼是 Strong Parameters?



說白了 Strong Parameter 其是就是一層白名單過濾。


View 層穿過來的數據會轉化為一個 ActionController::Parameters 對象


過濾老的 ActionController::Parameters 對象,生成一個新的 ActionController::Parameters 對象。


* 只保留白名單屬性

* 實例變數 @permitted 賦為 true

把過濾後的 ActionController::Parameters 對象傳給 model,創建或更新對應的的 ActiveRecord 對象。

可以硬傳給 model,霸王硬上弓嗎?


未經 Strong Parameter 過濾的 ActionController::Parameters 對象的 @permitted 為 false(過濾後為 true)。如果硬傳給 Model,會報錯 ActiveModel::ForbiddenAttributesError 。

如果本站有幫助到您,請不吝於給一個讚鼓勵!
0 0
原创粉丝点击