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

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

 更新時(shí)間:2014年06月25日 15:30:13   投稿:hebedich  
本文主要是通過(guò)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 安全問(wèn)題。所以 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ù),把過(guò)濾非法屬性的職責(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?

 

說(shuō)白了 Strong Parameter 其是就是一層白名單過(guò)濾。

View 層穿過(guò)來(lái)的數(shù)據(jù)會(huì)轉(zhuǎn)化為一個(gè) ActionController::Parameters 對(duì)象

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

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

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

相關(guān)文章

最新評(píng)論

五原县| 屏边| 铁岭市| 镇康县| 武陟县| 东光县| 诏安县| 大名县| 赣榆县| 广水市| 阿拉尔市| 西丰县| 闸北区| 灵山县| 安西县| 达拉特旗| 邢台市| 墨脱县| 无为县| 灌南县| 那曲县| 安化县| 怀集县| 阳谷县| 封丘县| 五河县| 河曲县| 文安县| 东阿县| 科技| 泉州市| 乌拉特后旗| 博罗县| 平山县| 古浪县| 嘉善县| 阿瓦提县| 全椒县| 开平市| 徐水县| 新兴县|