Как я могу установить attr_accessible, чтобы НЕ разрешить доступ к ЛЮБОЙ из полей для модели с использованием Ruby on Rails?
Если в файле модели у меня есть только этот код:
class Users < ActiveRecord::Base
end
что это значит? Доступны все атрибуты, связанные с моделью?
Как я могу установить attr_accessible, чтобы не разрешать доступ к любому из полей для этой модели?
Ответы
Ответ 1
Просто установите:
class Users < ActiveRecord::Base
attr_accessible #none
end
Как сказал Пан Томакос (attr_accessible - это массив параметров, который может быть массовым, поэтому, если вы не отправляете никаких символов, то никакие параметры не будут доступны.
Этот билет был полезен
Ответ 2
По умолчанию все атрибуты attr_accessible (что означает, что они могут быть установлены для моего массового назначения).
- attr_accessible - только этот список атрибутов может быть задан путем массового присвоения (белый список).
- attr_protected - эти атрибуты не могут быть заданы с помощью массового присвоения (черный список).
- attr_readonly - эти атрибуты не могут быть установлены, кроме случаев, когда запись создана.
Чтобы полностью отключить массовое присвоение, используйте что-то вроде этого:
ActiveRecord::Base.send(:attr_accessible, nil)
Эта команда отключит массовое присвоение для всех активных объектов записи, но вы можете указать одну или несколько моделей для выполнения этой команды, если вы хотите массовое присвоение в некоторых случаях, но не в других.
Ответ 3
Начиная с Rails 3.1, доступна следующая опция конфигурации для отключения массового присвоения по умолчанию для всех моделей, пока вы явно не вызовете attr_accessible или attr_protected:
config.active_record.whitelist_attributes = true
См. http://edgeguides.rubyonrails.org/security.html#mass-assignment и https://github.com/rails/rails/commit/f3b9d3aba8cc0ffaca2da1c73c4ba96de2066760