本文主要是通过Rails3中的Parameters与Rails4中新引入的Strong Parameters机制进行对比,从而得出他们直接的异同
要弄明白Rails 4 中Strong Parameters机制,首先我们要看看Rails3中的Parameters
找了台服务器将磁力链接爬虫架设起来http://www.51bt.cc(51搜索)大家可以看下。
在 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
endRails 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
要弄明白Rails 4 中Strong Parameters机制,首先我们要看看Rails3中的Parameters
找了台服务器将磁力链接爬虫架设起来http://www.51bt.cc(51搜索)大家可以看下。
在 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
endRails 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