使用强参数需要作为所需的表单属性'验证

时间:2016-07-22 06:57:17

标签: ruby-on-rails

我团队中的一个人建议使用ActionController :: Parameters#require方法来验证用户是否提交了“必需的”'输入表格。

对我而言,它并不适合,因为您必须与ActiveRecord模型分开处理错误(存在:true)。

因此,举例来说,我们假设我们的用户名为:name,:age和:zip_code。并且:姓名和年龄是必需的。

他想要类似的东西:

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

对我来说,似乎强参数不是为此目的而设计的,而presence: true等模型验证则更加干净。

您认为什么是良好做法?为什么使用一个而不是另一个?

1 个答案:

答案 0 :(得分:1)

模型验证与此完全不同。您有模型验证来实现字段上允许的值,必填字段是什么等等......它更多的是业务逻辑。但是,强参数是一种安全措施。

强大的参数可以防止用户更新数据库中不需要的字段。这是一种安全措施,以便应用程序决定可以在数据库中更新哪些字段。例如,如果表中有name,age,zip_code和login_attempt。 login_attempt用于计算失败的登录尝试次数。如果您没有强参数,并按如下方式保存用户更改,

@user = User.new(params[:user])
@user.save

用户也可以轻松更新login_attempt字段。为了防止这种导轨具有很强的参数。因此,您不再容易将不需要的字段更新到表中。当您尝试更新不允许的字段时,您将获得此ForbiddenAttributesError。正确的方法如下,

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

@user = User.new(allowed_params)
@user.save