4

使用 ActiveRecord 时,您可以将其配置为在测试中引发批量分配异常,方法是将此行放入config/environments/test.rb

config.active_record.mass_assignment_sanitizer = :strict

有没有办法用 Mongoid 完成同样的事情?

4

1 回答 1

4

通过阅读代码 Mongoid 使用 ActiveModel 进行批量分配保护。这与 Rails 中的完全一样,但似乎配置并没有完全连接起来。

从实现中我可以收集到会发生什么:

attributes.rb assign_attributes调用processing.rb

processing.rb然后调用active_model sanitizer,调用以sanitize结束。应该引发异常的方法是:process_removed_attributesstrict sanitizer 类logging sanitizer覆盖。

在这种情况下,您现在只需要了解如何配置 Mongoid 以使用 strict_sanitizer。我正在进一步调查,但严格来说,这似乎是一个 active_model 配置,与 Mongoid 无关。

在您的情况下有效但不理想的是mass_assignment_sanitizer在模型上分配:

Modelname.mass_assignment_sanitizer = :strict

但这只会改变这个模型。我根本无法在mongoid config中找到任何消毒剂引用。

于 2012-08-25T09:59:45.647 回答