欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談Rails 4 中Strong Parameters機制

 更新時間:2014年06月25日 15:30:13   投稿:hebedich  
本文主要是通過Rails3中的Parameters與Rails4中新引入的Strong Parameters機制進行對比,從而得出他們直接的異同

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

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

Rails 3

# kings_controller.rb
def create
 #{ name: ‘David', sex:male, age: 31}
 @king = King.new(params[:king])
 if @king.save
  redirect_to @king
 else
  render 'new'
 end
end


# king.rb
class King
 attr_accessible :name
end

Rails 4

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

# kings_controller.rb
def create
 # new parameter { name: ‘David' }
 @king = King.new(king_params)
 if @king.save
  redirect_to @king
 else
  render 'new'
 end
end

private

def king_params
 # old parameter { name: ‘David', sex:male, age: 31}
 # new parameter { name: ‘David' }
 params[:king].permit(:name)
end


# king.rb
class King

end 

什么是 Strong Parameters?

 

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

View 層穿過來的數(shù)據(jù)會轉(zhuǎn)化為一個 ActionController::Parameters 對象

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

* 只保留白名單屬性
* 實例變量 @permitted  賦為 true
把過濾后的 ActionController::Parameters 對象傳給 model,創(chuàng)建或更新對應的的 ActiveRecord 對象。
可以硬傳給 model,霸王硬上弓嗎?

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

相關(guān)文章

  • 對優(yōu)化Ruby on Rails性能的一些辦法的探究

    對優(yōu)化Ruby on Rails性能的一些辦法的探究

    這篇文章主要介紹了對優(yōu)化Ruby on Rails性能的一些辦法的一些探究,包括避免內(nèi)存密集型的應用和GC等相關(guān)問題的探討,需要的朋友可以參考下
    2015-11-11
  • Ruby中的反射(Reflection)應用實例

    Ruby中的反射(Reflection)應用實例

    這篇文章主要介紹了Ruby中的反射(Reflection)應用實例,實現(xiàn)通過一個類名字符串構(gòu)造一個類對象和訪問成員變量和私有方法 ,需要的朋友可以參考下
    2014-06-06
  • 在 Ubuntu 12.04 Server 上安裝部署 Ruby on Rails 應用

    在 Ubuntu 12.04 Server 上安裝部署 Ruby on Rails 應用

    本教程只適合 Ubuntu Server 用于部署項目到線上,建議使用同樣的 Ubuntu 版本,以免遇到一些版本不同帶來的問題
    2014-07-07
  • rudy 方法 分析

    rudy 方法 分析

    rudy 方法 分析...
    2007-11-11
  • Ruby信號處理詳解

    Ruby信號處理詳解

    這篇文章主要介紹了Ruby信號處理詳解,包含了Ruby使用Process.kill發(fā)送信號,Ruby使用trap()設(shè)置信號處理程序等需要的朋友可以參考下
    2022-04-04
  • Ruby升級后no such file to load -- readline解決辦法

    Ruby升級后no such file to load -- readline解決辦法

    這篇文章主要介紹了Ruby升級后no such file to load -- readline解決辦法,需要的朋友可以參考下
    2015-04-04
  • 編寫Ruby代碼注釋時需要注意的一些問題

    編寫Ruby代碼注釋時需要注意的一些問題

    這篇文章主要介紹了編寫Ruby代碼注釋時需要注意的一些問題,特別是在團隊協(xié)作時好的注釋能大大增加代碼的可讀性,需要的朋友可以參考下
    2015-08-08
  • Ruby中的Range對象學習筆記

    Ruby中的Range對象學習筆記

    這篇文章主要介紹了Ruby中的Range對象學習筆記,本文講解了Range對象的定義、Range對象的一些使用技巧等內(nèi)容,需要的朋友可以參考下
    2014-11-11
  • 你應該知道的Ruby代碼風格

    你應該知道的Ruby代碼風格

    Ruby是非常自由靈活的語言,所以不同的Rubist風格差異可能很大。那么在代碼規(guī)范方面他們的差異大不大呢? 通過分析GitHub上托管的開源代碼,得出了 一些有趣的結(jié)果 ,讓我們一起來看看Rubist的喜好吧
    2014-03-03
  • Rails應用程序中同時修改操作沖突問題的解決方案

    Rails應用程序中同時修改操作沖突問題的解決方案

    這篇文章主要介紹了Rails應用程序中同時修改操作沖突問題的解決方案,本文講解使用Rails 的 樂觀鎖解決這個問題并給出了代碼救命,需要的朋友可以參考下
    2015-03-03

最新評論