对于我的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)
正如说明所述,我已经在Patients
表中添加了encrypted_#{field}
、encrypted_#{field}_salt
和encrypted_#{field}_iv
列,同时删除了它们的非加密对应项。
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
我在Patient
控制器中的create
方法如下所示:
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
我做错了什么?提前感谢您的帮助!
用attr_accessible
和attr_encrypted
来标记这些属性,因为后者并不意味着前者。
这可能也与日期字段相关:处理与虚拟属性对应的多参数属性的正确方法