Ошибка MassAssignmentSecurity при использовании гема attr_encrypted (attr_encryptor)

Для моего приложения rails 3.2.3 я использую attr_encryptor, который является ответвлением attr_encrypted от danpal. Я следовал инструкциям, приведенным здесь, но при попытке создайте новую запись Patient:

ActiveModel::MassAssignmentSecurity::Error in PatientsController#create

Can't mass-assign protected attributes: mrn, last_name, first_name, date_of_birth(1i), date_of_birth(2i), date_of_birth(3i)

Как говорится в инструкциях, я добавил столбцы encrypted_#{field}, encrypted_#{field}_salt и encrypted_#{field}_iv в свою таблицу Patients, удалив их незашифрованные аналоги.

Модель Patient выглядит так:

class Patient < ActiveRecord::Base
  attr_accessible :age, :gender
  attr_encrypted :last_name, :key => 'key 1'
  attr_encrypted :first_name, :key => 'key 2'
  attr_encrypted :mrn, :key => 'key 3'
  attr_encrypted :date_of_birth, :key => 'key 4'
  # ...
end

Мой метод create в моем контроллере Patient выглядит так:

PatientsController < ApplicationController
  # ...
  def create
    @patient = Patient.new
    @patient.first_name = params[:patient][:first_name]
    @patient.last_name = params[:patient][:last_name]
    @patient.mrn = params[:patient][:mrn]
    @patient.date_of_birth = Date.new(params[:patient]['date_of_birth(1i)'],
                                      params[:patient]['date_of_birth(2i)'],
                                      params[:patient]['date_of_birth(3i)'])
    if @patient.save
      # do stuff
    else
      # do other stuff
    end
  end
  # ...
end

Что я делаю неправильно? Заранее спасибо за помощь!


person oort    schedule 08.06.2012    source источник


Ответы (1)


Вам нужно пометить эти атрибуты как attr_accessible, так и attr_encrypted, так как последнее не подразумевает первого.

Это также может относиться к полю даты: для обработки многопараметрических атрибутов, соответствующих виртуальным атрибутам

person Richard Cook    schedule 17.07.2013