Сильные параметры в рельсах 3.2.8 - программирование
Подтвердить что ты не робот

Сильные параметры в рельсах 3.2.8

В этом видео указано, что можно защитить вход, поступающий через контроллер, но все же иметь возможность выполнять массовое присвоение через модели и спецификации, Тем не менее, я не видел, чтобы это было зафиксировано как функция при использовании сильных_параметров в 3.2.8.

Я понимаю, что мне нужно смешать в ActiveModel::ForbiddenAttributesProtection в моих моделях и установить config.active_record.whitelist_attributes = false в config/application.rb. Я также вытащил все мои вызовы attr_accessible из модели.

С миксином или без него возникают ошибки массового присвоения.

ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: home_phone, cell_phone

Я что-то пропустил?

4b9b3361

Ответ 1

Предлагаемый RailsCast, вероятно, хороший старт, но вот резюме того, что вы должны сделать в Rails3.x, чтобы получить сильные параметры, работающие вместо attr_accessible:

  • Добавьте gem 'strong_parameters' в свой Gemfile и запустите пакет.

  • Комментарий (или значение false) config.active_record.whitelist_attributes = true в config/application.rb

  • Смешайте в ActiveModel::ForbiddenAttributesProtection в своей модели (railscast предлагает сделать это в новом инициализаторе, config/initializers/strong_parameters.rb ActiveRecord::Base.send(:include, ActiveModel::ForbiddenAttributesProtection))

  • С этого момента вам придется использовать синтаксис, например:

    model_params = params[:model].permit( :attribute, :another_attribute )
    @model.update_attributes( model_params )
    

    когда вы обновляете свои модели. В этом случае любой атрибут в params[:model] кроме :attribute и :another_attribute приведет к ошибке ActiveModel:: ForbiddenAttributes.

Вы также можете использовать остальную часть новой магии от ActionController::Parameters, например .require(:attribute), чтобы заставить присутствие атрибута.

Ответ 2

Это не то же самое, что и ваша проблема, но может возникнуть проблема с получением MassAssignmentSecurity:: Error. Я столкнулся с проблемой, по которой атрибуты "id" и "type" кажутся защищенными по умолчанию, даже когда я принял предписанные шаги, чтобы переключиться на использование сильных параметров, а не защиту массового присвоения. У меня была ассоциация с именем "тип", которую я переименовал в "project_type" для решения проблемы (этот атрибут уже был project_type_id).