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

在 Rails3 中创建或更新 Active Record 对象时,会有 Mass Assignment 安全问题。所以 Model 中需要列一个白名单,声明哪些属性可以被 parameter 的数据更新。

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"theimg" onclick="window.open(this.src)" src="/UploadFiles/2021-04-08/2014625153021671.png">

说白了 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 。

广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!

RTX 5090要首发 性能要翻倍!三星展示GDDR7显存

三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。

首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。

据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。