2012-03-20 1 views
3

Рекомендуемое решение заключается в следующем:Есть ли способ установить attr_accessible по умолчанию в проекте rails с Mongoid?

config.active_record.whitelist_attributes = true 

Но это работает только, если вы используете активную запись. На проекте mongoid rails есть аналогичный подход? Он использует активную модель, но не активную запись.

ответ

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 
2

Я никогда не использовал Mongoid, поэтому это довольно спекулятивно, но из-за внешнего вида AR использует инициализатор Railtie для установки attr_accessible (nil), когда эта конфигурация истинна.

Не похоже, что в настоящее время есть способ сделать это в конфиге, но вы, вероятно, можете каким-то образом связать его с вашим собственным инициализатором. В Mongoid :: Fields, если config для protected_sensitive_fields истинно (по умолчанию), он вызывает attr_protected для id, _id и _type. Это также устанавливает активный_авторизатор в черный список. Возможно, вы могли бы исправить это и предоставить лучшую конфигурацию для белого списка, который вместо этого вызывает attr_accessible (nil).

Так что да, было бы плохой идеей просто сделать патч, а затем отправить запрос на тяну. Последнее, что нужно сообществу рубинов, - это еще одно фиаско массового назначения высокого профиля.