我正在努力保护现有的 Rails 3 项目。运行刹车手,我收到许多模型类的警告:“可用于质量分配的潜在危险属性::example_id”
所有警告都在 _id 列上。
目前的模型如下所示:
class Comment < ActiveRecord::Base
attr_accessible :commentable_id, :content, :user_id
除了主要问题,如果 _id 列被删除以满足警告,那么设置这些字段的正确方法是什么?
我正在努力保护现有的 Rails 3 项目。运行刹车手,我收到许多模型类的警告:“可用于质量分配的潜在危险属性::example_id”
所有警告都在 _id 列上。
目前的模型如下所示:
class Comment < ActiveRecord::Base
attr_accessible :commentable_id, :content, :user_id
除了主要问题,如果 _id 列被删除以满足警告,那么设置这些字段的正确方法是什么?
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
.
您还应该考虑当前推荐的批量分配保护解决方案 -强参数:
如果你使用它,默认情况下所有参数都是被禁止的。如果任何控制器应该使用某些参数,您需要明确允许它们。
假设您有用户和条目。如果有人要更新他的条目并另外发送一个user_id
参数,他可以重新分配记录用户,这真的很糟糕。由于strong_parameters
将所有参数列入黑名单,因此您允许控制器仅接受entry.name
,entry.details
和entry.tags
(或其他)。即使是entry.user_id
发送,也会被忽略!
您可能想进一步了解: https ://github.com/rails/strong_parameters