3

推荐的解决方案是这样的:

config.active_record.whitelist_attributes = true

但这仅在您使用活动记录时才有效。在 mongoid rails 项目上是否有类似的方法?它使用活动模型但不使用活动记录。

4

3 回答 3

2

我从来没有使用过 Mongoid,所以这是相当推测的,但从它的外观来看,AR 使用 Railtie 初始化程序来设置 attr_accessible(nil) 当该配置为真时。

看起来目前在配置中没有办法做到这一点,但你可能会以某种方式将它与你自己的初始化程序挂钩。在 Mongoid::Fields 中,如果protect_sensitive_fields 的配置为true(默认),它会为id、_id 和_type 调用attr_protected。这也将 active_authorizer 设置为黑名单。您可能可以修补它并为调用 attr_accessible(nil) 的白名单提供更好的配置。

所以,是的,只是制作一个补丁然后提交一个拉取请求并不是一个坏主意。ruby 社区最不需要的就是另一个备受瞩目的大规模任务惨败。

于 2012-03-20T07:09:57.527 回答
1

我问过同样的问题

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
于 2012-03-28T11:01:57.403 回答
1

现在这可以解决问题:

http://groups.google.com/group/mongoid/browse_thread/thread/de5a93a350b49c02?pli=1

于 2012-03-26T13:05:59.013 回答