推荐的解决方案是这样的:
config.active_record.whitelist_attributes = true
但这仅在您使用活动记录时才有效。在 mongoid rails 项目上是否有类似的方法?它使用活动模型但不使用活动记录。
推荐的解决方案是这样的:
config.active_record.whitelist_attributes = true
但这仅在您使用活动记录时才有效。在 mongoid rails 项目上是否有类似的方法?它使用活动模型但不使用活动记录。
我从来没有使用过 Mongoid,所以这是相当推测的,但从它的外观来看,AR 使用 Railtie 初始化程序来设置 attr_accessible(nil) 当该配置为真时。
看起来目前在配置中没有办法做到这一点,但你可能会以某种方式将它与你自己的初始化程序挂钩。在 Mongoid::Fields 中,如果protect_sensitive_fields 的配置为true(默认),它会为id、_id 和_type 调用attr_protected。这也将 active_authorizer 设置为黑名单。您可能可以修补它并为调用 attr_accessible(nil) 的白名单提供更好的配置。
所以,是的,只是制作一个补丁然后提交一个拉取请求并不是一个坏主意。ruby 社区最不需要的就是另一个备受瞩目的大规模任务惨败。
我问过同样的问题
https://groups.google.com/forum/?fromgroups#!topic/mongoid/xuBbuyhiFEU
目前不支持它,但你可以做一个(直接的)猴子补丁(正如 Benedikt 建议的那样)
https://gist.github.com/1977438
它与 AR 非常相似(您可以查看 AR 代码,为简单起见,我将其复制到此处)
ActiveSupport.on_load(:active_record) do
if app.config.active_record.delete(:whitelist_attributes)
attr_accessible(nil)
end
app.config.active_record.each do |k,v|
send "#{k}=", v
end
end