問題:
フォームを送信すると、次のようなエラーメッセージが表示されます。
ActiveModel :: MassAssignmentSecurity :: AdmissionRecordsController#createのエラー
保護された属性を一括割り当てできません:admission_record
私のセットアップ:
Rails 3.2.3を使用しており、Cocoon1.0.14やSimple_Form2.0.2などの追加のgemがあります。
景色:
私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
ネストされたフォームを介して(cocoonと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にあるようなデモアプリの他の例とソースコードを調べましたが、それでもこのエラーを修正できないようです。この問題をデバッグするために必要な他の情報があれば、私に知らせてください。ありがとう!