有没有一种方法可以在Mongoid的rails项目中默认设置attr_accessible



推荐的解决方案是:

config.active_record.whitelist_attributes = true

但只有当您使用活动记录时,这才有效。在mongoid rails项目中,有类似的方法吗?它使用活动模型,但不使用活动记录。

我从未使用过Mongoid,所以这是非常推测性的,但从外观上看,当配置为true时,AR使用Railtie初始值设定项来设置attr_accessible(nil)。

目前在配置中似乎没有实现这一点的方法,但您可能会以某种方式将其与自己的初始值设定项挂钩。在Mongoid::Fields中,如果protect_sensitive_Fields的config为true(默认值),则会为id、_id和_type调用attr_protected。这也将active_authorizer设置为黑名单。您可能会对此进行修补,并为调用attr_accessible(nil)的白名单提供更好的配置。

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

我问了同样的问题

https://groups.google.com/forum/?fromgroups#!主题/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

这将暂时奏效:

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

相关内容

  • 没有找到相关文章

最新更新