如何使用对象数组执行强参数

时间:2016-10-25 02:01:00

标签: ruby-on-rails ruby-on-rails-5

如果我有用户

def user_params
    params.require(:user).permit(:name, :age)
end

我明白了。我想批量创建用户。因此,用户可以填写用户的列表(理论上无穷无尽),他们会以:

的形式出现
[{name: "name", age: 12},{name: "name", age: 22},{name: "name", age: 32}]

问题是,我如何使用强参数?我知道我可以循环遍历数组并创建记录,我明白了。我的理解是,强大的params通常是一个好主意,安全明智。

什么是强大的护身符保护我?如果我只是对用户数组进行循环,那么我将在这里打开自己的什么?如何使用强力参数或其他方法正确完成?

1 个答案:

答案 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