如果我有用户
def user_params
params.require(:user).permit(:name, :age)
end
我明白了。我想批量创建用户。因此,用户可以填写用户的列表(理论上无穷无尽),他们会以:
的形式出现[{name: "name", age: 12},{name: "name", age: 22},{name: "name", age: 32}]
问题是,我如何使用强参数?我知道我可以循环遍历数组并创建记录,我明白了。我的理解是,强大的params通常是一个好主意,安全明智。
什么是强大的护身符保护我?如果我只是对用户数组进行循环,那么我将在这里打开自己的什么?如何使用强力参数或其他方法正确完成?
答案 0 :(得分:3)
强参数的全部要点(在rails 4中引入),目的是保护应用程序免受mass assignment漏洞的攻击。例如,假设您有User
模型,并且它具有admin
属性。如果您在理论上使用质量分配,如果您没有过滤掉某些内容,那么有人可能会为admin属性赋值;见下文
class UserController < ApplicationController
def create
#{name: 'Joe', score: 7, title: 'Mr', admin: true} params hash
User.create(params)
end
end
现在,如果你的应用程序的用户如何传递这些值,他们只是自己和管理员,并可以随心所欲。这就是为什么你会使用强params来做到这一点。
class UserController < ApplicationController
def create
User.create(user_params)
end
def user_params
params.require(:name).permit(:title, :score) #noticed admin is not allowed
end
end
现在要创建具有强参数的多个记录,您可以执行此操作
class UserController < ApplicationController
def create
user_params[:users].each do |u|
User.create(u)
end
end
def user_params
params.permit(:users, array: [:name, :age])
end
end