Ruby on rails 3 Can';t mass在Rails 3应用程序中使用cocoon和simple_表单为嵌套表单分配受保护的属性
问题: 我在提交表格时收到一条错误消息,上面写着: ActiveModel::MassAssignmentSecurity::许可记录控制器#创建时出错 无法批量分配受保护的属性:许可记录 我的设置: 我使用的是Rails 3.2.3,包括Cocoon 1.0.14和Simple_Form 2.0.2 视图: 我的Ruby on rails 3 Can';t mass在Rails 3应用程序中使用cocoon和simple_表单为嵌套表单分配受保护的属性,ruby-on-rails-3,simple-form,nested-forms,cocoon-gem,Ruby On Rails 3,Simple Form,Nested Forms,Cocoon Gem,问题: 我在提交表格时收到一条错误消息,上面写着: ActiveModel::MassAssignmentSecurity::许可记录控制器#创建时出错 无法批量分配受保护的属性:许可记录 我的设置: 我使用的是Rails 3.2.3,包括Cocoon 1.0.14和Simple_Form 2.0.2 视图: 我的app/views/admission\u records/\u form.html.haml看起来像: = simple_form_for [@admission, @record]
app/views/admission\u records/\u 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
.nested-fields
= f.label :sbp
= f.text_field :sbp
...
= link_to_remove_association "Remove Vital Sign"
resources :patient_admissions do
resources :admission_records
end
class PatientAdmission < ActiveRecord::Base
has_many :admission_records, :dependent => :destroy
end
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
class VitalSign < ActiveRecord::Base
belongs_to :admission_record
attr_accessible # just fields that appear in the form
end
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
我的app/views/admission\u records/\u vital\u sign\u fields.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
.nested-fields
= f.label :sbp
= f.text_field :sbp
...
= link_to_remove_association "Remove Vital Sign"
resources :patient_admissions do
resources :admission_records
end
class PatientAdmission < ActiveRecord::Base
has_many :admission_records, :dependent => :destroy
end
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
class VitalSign < ActiveRecord::Base
belongs_to :admission_record
attr_accessible # just fields that appear in the form
end
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
我基本上想做的是,我有一个名为AdmissionRecord的资源嵌套在另一个名为PatientAdmission的资源中(route.rb
如下所示)。我还有另一个名为VitalSign
的资源,我希望在创建AdmissionRecord
我的config/routes.rb
文件如下所示:
= 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
.nested-fields
= f.label :sbp
= f.text_field :sbp
...
= link_to_remove_association "Remove Vital Sign"
resources :patient_admissions do
resources :admission_records
end
class PatientAdmission < ActiveRecord::Base
has_many :admission_records, :dependent => :destroy
end
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
class VitalSign < ActiveRecord::Base
belongs_to :admission_record
attr_accessible # just fields that appear in the form
end
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
型号:
我的app/models/patient\u admission.rb
看起来像:
= 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
.nested-fields
= f.label :sbp
= f.text_field :sbp
...
= link_to_remove_association "Remove Vital Sign"
resources :patient_admissions do
resources :admission_records
end
class PatientAdmission < ActiveRecord::Base
has_many :admission_records, :dependent => :destroy
end
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
class VitalSign < ActiveRecord::Base
belongs_to :admission_record
attr_accessible # just fields that appear in the form
end
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
我的app/models/vital_sign.rb
看起来像:
= 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
.nested-fields
= f.label :sbp
= f.text_field :sbp
...
= link_to_remove_association "Remove Vital Sign"
resources :patient_admissions do
resources :admission_records
end
class PatientAdmission < ActiveRecord::Base
has_many :admission_records, :dependent => :destroy
end
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
class VitalSign < ActiveRecord::Base
belongs_to :admission_record
attr_accessible # just fields that appear in the form
end
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
请求:
请帮我找出哪里出了问题。我在谷歌上搜索了几个小时,查看了演示应用程序的其他示例和源代码,如中的示例和源代码,但似乎仍然无法修复此错误。如果需要任何其他信息来调试此问题,请告诉我。谢谢 好的,我刚刚遇到了这个问题,通过在模型中输入一行代码来修复它
# patient_admission.rb
Class PatientAdmission < ActiveRecord::Base
attr_accessible :admission_record_attributes
accepts_nested_attributes_for :admission_record
...
end
#病人入院.rb
类PatientMission
以下是解决方案:)您可以为该请求添加日志吗?在最新的Rails中,默认情况下所有属性都受到保护。因此,在编写
.build(params[:acmission\u record])
时,应该将属性指定为可访问的。