手机
当前位置:查字典教程网 >脚本专栏 >ruby专题 >浅谈Rails 4 中Strong Parameters机制
浅谈Rails 4 中Strong Parameters机制
摘要:要弄明白Rails4中StrongParameters机制,首先我们要看看Rails3中的Parameters在Rails3中创建或更新Ac...

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

浅谈Rails 4 中Strong Parameters机制1

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

【浅谈Rails 4 中Strong Parameters机制】相关文章:

RVM安装和使用总结笔记

浅谈Ruby on Rails的国际化

Ruby 中关于日文转UTF-8及半角全角转换的技巧

浅析Ruby中的Profiling工具的用法

ruby、javascript、php中的观察者模式实现代码

Ruby中的block代码块学习教程

Ruby使用Monkey Patch猴子补丁方式进行程序开发的示例

Ruby中的字符串编写示例

源代码快速定位工具-qwandry使用指南

Ruby on Rails中的ActiveResource使用详解

精品推荐
分类导航