Rails atttr_accesible не работает как описано - PullRequest
0 голосов
/ 16 марта 2012

В рельсах 3.2.1 у меня есть модель:

class Player < ActiveRecord::Base
  attr_accessor :password
  attr_accessible :email, :password
  attr_accessible :email, :password, :confirmed, :as => :admin
end

Я продолжаю получать ActiveModel::MassAssignmentSecurity::Error за следующее:

params[:player]
#=> {:email => "some@email.com", :password => "12345", :confirmed => true)
player = Player.new(params[:player])

Почему это происходит, когда все, что я хочу, это игнорировать атрибут :confirmed и продолжать заниматься своим делом. Документация создает впечатление, что я должен быть в состоянии это сделать, но я продолжаю получать это исключение, и оно действительно приходит ко мне, потому что либо я делаю это неправильно, либо документы неверны.

Я бы хотел помочь с этим.

Ответы [ 2 ]

3 голосов
/ 16 марта 2012

Вы можете настроить то, что вы хотите, чтобы происходило, когда массовое назначение происходит, установив Player.mass_assignment_sanitizer (или установите его на ActiveRecord::Base для применения ко всем моделям AR)

Вы также можете установить его вваши файлы конфигурации через config.active_record.mass_assignment_sanitizer

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

2 голосов
/ 16 марта 2012

Закомментируйте эту строку в development.rb:

config.active_record.mass_assignment_sanitizer = :strict

Строгое значение вызовет ошибку, а значение по умолчанию просто выдаст предупреждение.

...