2012-05-29 1 views
1

Проблема:Не удается массовым правопреемником защищенного атрибутов для вложенной формы с использованием кокона и simple_forms в Rails 3 App

Я получаю сообщение об ошибке при подаче моей формы, которая говорит:

ActiveModel :: MassAssignmentSecurity :: Ошибка в AdmissionRecordsController # создать

Может не массовый правопреемником защищенные атрибуты: admission_record

Моя установка:

Я использую Rails 3.2.3 с дополнительными камнями, включая Cocoon 1.0.14 и 2.0.2 Simple_Form

The View:

Мои 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, но по-прежнему не может исправить эту ошибку. Если есть какая-либо другая информация, необходимая для отладки этой проблемы, сообщите мне. Благодаря!

+0

Не могли бы вы добавить журналы для этого запроса? Также в последних Rails все атрибуты по умолчанию защищены. Поэтому, когда вы пишете '.build (params [: admission_record])', вы должны указывать атрибуты как доступные. –

ответ

0

Хорошо, что у меня была эта проблема, и исправил ее, введя одну строку кода в model.

# patient_admission.rb 
Class PatientAdmission < ActiveRecord::Base 
    attr_accessible :admission_record_attributes 

    accepts_nested_attributes_for :admission_record 

    ... 
end 

another Вот решение к нему :)

Смежные вопросы