【问题标题】:Is there a way to set attr_accessible by default in a rails project with Mongoid?有没有办法在使用 Mongoid 的 rails 项目中默认设置 attr_accessible ?
【发布时间】:2012-03-20 04:06:08
【问题描述】:

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

config.active_record.whitelist_attributes = true

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

【问题讨论】:

    标签: ruby-on-rails mongoid attr-accessible


    【解决方案1】:

    我从来没有使用过 Mongoid,所以这是推测性的,但从外观上看,AR 使用 Railtie 初始化器在该配置为 true 时设置 attr_accessible(nil)。

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

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

    【讨论】:

      【解决方案2】:

      我也问过同样的问题

      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
      

      【讨论】:

        【解决方案3】:
        猜你喜欢
        • 2013-01-11
        • 1970-01-01
        • 2016-07-16
        • 1970-01-01
        • 2018-07-23
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多