仅适用于更新/创建或所有操作的强参数

时间:2015-11-07 19:48:41

标签: ruby-on-rails ruby-on-rails-4 strong-parameters

strong parameters所需的嵌套格式会自动显示表单,即updatecreate操作。

这是否意味着它仅适用于那些操作,而对于其他获取请求,我们应该在控制器中使用普通的旧params[:token]

我之所以要问的是要了解我是否应该创建嵌套格式以及此link_to user.first_name, user_path(user: {token: user.token})之类的请求或只是link_to user.first_name, user_path(token: user.token)

3 个答案:

答案 0 :(得分:1)

强params是一种安全机制,只能用于添加或更改数据的操作,特别是同时为多个属性执行此操作的操作,因此称为质量分配。通常,使用质量分配的典型控制器方法是创建和更新,因此这些通常是必须保护的唯一方法。我之所以说通常是因为你总能拥有一个使用质量赋值的自定义控制器方法。

质量分配如下:

attrs = {:first => "John", :last => "Doe", :email => "john.doe@example.com"}
user = User.new(attrs)

您现在拥有一个分配了所有这些属性的用户,这很方便。否则,您必须手动执行每个属性。问题是如果你没有将可以通过强params分配的属性列入白名单,有人可以操纵POST或PUT / PATCH请求来说出类似这样的内容:admin => true

希望能让它更加清晰。

答案 1 :(得分:0)

Strong Parameters提供了一个界面,用于保护最终用户 分配 的属性。使用Strong Parameters操作控制器参数禁止在活动模型 批量分配 中使用,直到它们被列入白名单。这意味着您必须有意识地选择允许 批量更新 的属性,从而防止意外暴露不应暴露的属性。

因此,当您更新这两种操作中的属性时,这适用于createupdate操作。在GET请求中,您不会更新任何属性。因此,在这些请求中不需要强参数。

答案 2 :(得分:0)

简而言之,我们需要为所有POSTPATCHPUT)方法操作使用强参数进行验证和更新。