最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Rails 4 中Strong Parameters機(jī)制

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

要弄明白R(shí)ails 4 中Strong Parameters機(jī)制,首先我們要看看Rails3中的Parameters

在 Rails3 中創(chuàng)建或更新 Active Record 對(duì)象時(shí),會(huì)有 Mass Assignment 安全問題。所以 Model 中需要列一個(gè)白名單,聲明哪些屬性可以被 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 的機(jī)制,Model 不再負(fù)責(zé)白名單的維護(hù),把過濾非法屬性的職責(zé)推給了 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ù)會(huì)轉(zhuǎn)化為一個(gè) ActionController::Parameters 對(duì)象

過濾老的 ActionController::Parameters 對(duì)象,生成一個(gè)新的 ActionController::Parameters 對(duì)象。

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

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

相關(guān)文章

最新評(píng)論

思茅市| 遂溪县| 临清市| 万州区| 景德镇市| 吐鲁番市| 修武县| 永兴县| 内黄县| 瑞昌市| 厦门市| 嘉兴市| 全南县| 屯昌县| 寿宁县| 黑河市| 台中市| 礼泉县| 裕民县| 清远市| 东台市| 曲麻莱县| 龙里县| 仁寿县| 淮安市| 称多县| 万安县| 高州市| 望奎县| 循化| 铁岭县| 兴海县| 灵璧县| 韩城市| 如东县| 九龙县| 通化县| 资阳市| 济南市| 乐昌市| 新和县|