仅用于 update/create 或所有操作的强参数

Strong parameters only for update/create or for all actions

strong parameters 要求的嵌套格式自动随表单一起提供,即 updatecreate 操作。

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

我问的原因是想了解我是否应该为这样的 get 请求创建嵌套格式 link_to user.first_name, user_path(user: {token: user.token}) 或只是 link_to user.first_name, user_path(token: user.token)

Strong Parameters provide an interface for protecting attributes from end-user assignment. With Strong Parameters 禁止在活动模型中使用动作控制器参数 批量分配 直到它们被列入白名单。这意味着您必须有意识地选择允许 大规模更新 的属性,从而防止意外暴露不应暴露的内容暴露了。

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

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

批量分配如下所示:

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

您现在拥有一个分配了所有这些属性的用户,这很方便。否则,您将不得不手动执行每个属性。问题是,如果您不将可以通过强参数分配的属性列入白名单,有人可能会操纵 POST 或 PUT/PATCH 请求说出这样的话 :admin => true

希望这能让它更清楚一点。

简而言之,我们需要对所有 POST & PATCH(PUT) 方法操作使用强参数进行验证和更新。