1

我正在努力保护现有的 Rails 3 项目。运行刹车手,我收到许多模型类的警告:“可用于质量分配的潜在危险属性::example_id”

所有警告都在 _id 列上。

目前的模型如下所示:

class Comment < ActiveRecord::Base
    attr_accessible :commentable_id, :content, :user_id

除了主要问题,如果 _id 列被删除以满足警告,那么设置这些字段的正确方法是什么?

4

2 回答 2

1

rails使用Active Record关联总是API更好。

在您的情况下,这样做更安全、更酷:

@commentable = Commentable.take
@commentable.comments.build attribute: 'value', ...
# or
@commentable.comments.create attribute: 'value', ...

而不是:

Comment.new commentable_id: @commentable.id, attribute: 'value', ...

因此,如果您坚持最佳实践,您将不需要列入白名单commentable_id或任何其他_id.

您还应该考虑当前推荐的批量分配保护解决方案 -强参数

«如何在 Rails 中升级到强参数»

于 2015-09-04T13:20:33.573 回答
0

如果你使用它,默认情况下所有参数都是被禁止的。如果任何控制器应该使用某些参数,您需要明确允许它们。

假设您有用户和条目。如果有人要更新他的条目并另外发送一个user_id参数,他可以重新分配记录用户,这真的很糟糕。由于strong_parameters将所有参数列入黑名单,因此您允许控制器仅接受entry.name,entry.detailsentry.tags(或其他)。即使是entry.user_id发送,也会被忽略

您可能想进一步了解: https ://github.com/rails/strong_parameters

于 2015-09-04T13:16:27.137 回答