佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > 淺談Rails 4 中Strong Parameters機(jī)制

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

熱門標(biāo)簽:電話運(yùn)營(yíng)中心 企業(yè)做大做強(qiáng) 百度AI接口 客戶服務(wù) Win7旗艦版 語(yǔ)音系統(tǒng) 硅谷的囚徒呼叫中心 呼叫中心市場(chǎng)需求

要弄明白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 。

您可能感興趣的文章:
  • MyBatis3傳遞多個(gè)參數(shù)(Multiple Parameters)
  • Pytorch之parameters的使用
  • Struts2源碼分析之ParametersInterceptor攔截器
  • ECMAScript6函數(shù)剩余參數(shù)(Rest Parameters)
  • PowerShell函數(shù)中使用$PSBoundParameters獲取輸入?yún)?shù)列表實(shí)例
  • PDO版本問(wèn)題 Invalid parameter number: no parameters were bound
  • asp.net Parameters.AddWithValue方法在SQL語(yǔ)句的 Where 字句中的用法
  • 基于parameters參數(shù)實(shí)現(xiàn)參數(shù)化過(guò)程解析

標(biāo)簽:長(zhǎng)沙 崇左 山西 喀什 安康 海南 山西 濟(jì)南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《淺談Rails 4 中Strong Parameters機(jī)制》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    河曲县| 荆州市| 芜湖市| 汝阳县| 都昌县| 博罗县| 甘孜县| 三门峡市| 鄂州市| 莫力| 长宁区| 丰镇市| 桃江县| 枝江市| 修文县| 东辽县| 阿克苏市| 和政县| 垣曲县| 通山县| 甘洛县| 巴青县| 灵武市| 敖汉旗| 永春县| 泰和县| 阜阳市| 平和县| 阿城市| 永年县| 澄江县| 甘德县| 芦山县| 鹿邑县| 阿城市| 区。| 陆丰市| 车险| 根河市| 石门县| 民丰县|