Проблема:
При отправке формы я получаю сообщение об ошибке:
ActiveModel::MassAssignmentSecurity::Ошибка в AdmissionRecordsController#create
Невозможно массово назначить защищенные атрибуты: accept_record
Моя установка:
Я использую Rails 3.2.3 с дополнительными драгоценными камнями, включая Cocoon 1.0.14 и Simple_Form 2.0.2.
Вид:
Мой app/views/admission_records/_form.html.haml
выглядит так:
= simple_form_for [@admission, @record] do |f|
= f.simple_fields_for :vital_signs, @record.vital_signs.build do |vs|
= render :partial => "vital_sign_fields", :locals => { :f => vs }
= link_to_add_association "Add Vital Signs", f, :vital_signs
= f.submit
И мой app/views/admission_records/_vital_sign_fields.html.haml
выглядит так:
.nested-fields
= f.label :sbp
= f.text_field :sbp
...
= link_to_remove_association "Remove Vital Sign"
Что я в основном пытаюсь сделать, так это то, что у меня есть ресурс с именем AdmissionRecord, вложенный в другой ресурс с именем PatientAdmission (route.rb
, показанный ниже). У меня есть еще один ресурс с именем VitalSign
, который я хочу создать с помощью вложенной формы (используя кокон и simple_form) при создании AdmissionRecord
Мой файл config/routes.rb
выглядит так:
resources :patient_admissions do
resources :admission_records
end
Модели:
Мой app/models/patient_admission.rb
выглядит так:
class PatientAdmission < ActiveRecord::Base
has_many :admission_records, :dependent => :destroy
end
Мой app/models/admission_record.rb
выглядит так:
class AdmissionRecord < ActiveRecord::Base
belongs_to :patient_admission
has_many :vital_signs, :dependent => :destroy
accepts_nested_attributes_for :vital_signs, :rejects_if => :all_blank, :allow_destroy => true
attr_accessible :vital_signs_attributes
end
А мой app/models/vital_sign.rb
выглядит так:
class VitalSign < ActiveRecord::Base
belongs_to :admission_record
attr_accessible # just fields that appear in the form
end
Контролер:
Методы new
и create
в моем AdmissionRecordsController
выглядят так:
before_filter do
@admission = PatientAdmission.find(params[:patient_admission_id])
end
def new
@record = @admission.admission_records.build
end
def create
@record = @admission.admission_records.build(params[:admission_record])
@vital_sign = @record.vital_signs.build(params[:vital_signs])
@vital_sign.save
if @record.save
# Flash success and redirect to the right place
else
# Flash error and render :new
end
end
Призыв:
Пожалуйста, помогите мне найти, где я ошибаюсь. Я часами гуглил и просматривал другие примеры и исходный код демонстрационных приложений, таких как найденные в cocoon_simple_form_demo, но по-прежнему не может исправить эту ошибку. Если есть какая-либо другая информация, необходимая для отладки этой проблемы, сообщите мне. Спасибо!
.build(params[:admission_record])
, вы должны указать атрибуты как доступные. - person Mark Huk   schedule 28.06.2012