【发布时间】:2012-03-20 04:06:08
【问题描述】:
推荐的解决方案是这样的:
config.active_record.whitelist_attributes = true
但这仅在您使用活动记录时才有效。在 mongoid rails 项目上是否有类似的方法?它使用活动模型而不是活动记录。
【问题讨论】:
标签: ruby-on-rails mongoid attr-accessible
推荐的解决方案是这样的:
config.active_record.whitelist_attributes = true
但这仅在您使用活动记录时才有效。在 mongoid rails 项目上是否有类似的方法?它使用活动模型而不是活动记录。
【问题讨论】:
标签: ruby-on-rails mongoid attr-accessible
我从来没有使用过 Mongoid,所以这是推测性的,但从外观上看,AR 使用 Railtie 初始化器在该配置为 true 时设置 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
【讨论】: