Pet*_*r R 6 ruby-on-rails ruby-on-rails-5
如果我有用户
def user_params
params.require(:user).permit(:name, :age)
end
Run Code Online (Sandbox Code Playgroud)
我记下了。我想批量创建用户。因此,用户可以填写用户列表(理论上是无穷无尽的),他们将输入为:
[{name: "name", age: 12},{name: "name", age: 22},{name: "name", age: 32}]
Run Code Online (Sandbox Code Playgroud)
问题是,我如何为此使用强参数?我知道我可以循环遍历数组并创建记录,我明白了。我的理解是,强参数通常是一个好主意,安全方面。
什么是强大的参数保护我免受伤害?如果我只是遍历用户数组,我会在这里打开什么?我怎样才能正确地做到这一点,要么使用强参数,要么使用替代方法?
完整的强参数点(在 rails 4 中引入),目的是保护应用程序免受大规模分配漏洞的影响。例如,假设您有一个User模型并且它有一个admin属性。如果您在理论上使用批量分配,如果您没有以某种方式过滤掉它,那么有人可能会为 admin 属性输入一个值;见下文
class UserController < ApplicationController
def create
#{name: 'Joe', score: 7, title: 'Mr', admin: true} params hash
User.create(params)
end
end
Run Code Online (Sandbox Code Playgroud)
现在,如果你的应用程序的用户如何传递这些值,他们只是让自己和管理员可以做他们想做的事。所以这就是为什么你会使用强参数来做到这一点。
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
Run Code Online (Sandbox Code Playgroud)
现在要使用强参数创建多个记录,您可以执行此操作
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4065 次 |
| 最近记录: |