目前,我可以使用accepts_nested_attributes_for:student为我的成人表格创建多个学生。
但是如何通过学生表格编辑现有成人? (所以相反,除了编辑)
目前,我可以通过学生表单创建更多家长,但这不是我想要的。
模型
class Adult < ActiveRecord::Base
has_many :students
accepts_nested_attributes_for :student
end
class Student < ActiveRecord::Base
belongs_to :adult
accepts_nested_attributes_for :adult
end
CONTROLLER
class StudentsController < ApplicationController
def update
@adult = Adult.find(params[:adult_id])
@student = Student.find(params[:id])
if @student.update_attributes(student_params)
redirect_to path
end
end
private
def student_params
params.require(:student).permit(:adult_id, :school_id, :username, :password,
:firstName, :middleName, :lastName, :alias,
adult_attributes: [:id, :name])
end
end
视图
###HOW CAN I UPDATE THE EXISTING PARENT AS OPPOSE TO CREATING ONE
<%= simple_form_for @student.build_adult do |f| %>
<h4>Update Parent Information</h4>
<%= f.label :firstName, 'First Name' %>
<%= f.text_field :firstName, placeholder: "Parent's First Name", :class => "form-control"%>
<%= f.submit "Save & Continue", class: "btn btn-primary"%>
<% end %>
路线
resources :adult do
resources :student
end
答案 0 :(得分:1)
我不确定这个解决方案,但它可能有用......
尝试使用@parent.update_attributes
而不是创建单独的父表单,使用学生参数发送父参数。您可能需要定义parent_params()
函数以允许它们。
**我相信许可证参数会过滤掉不允许的参与号,因此您无需仅为学生或家长字段指定他们的尊重update_attributes
。
答案 1 :(得分:1)
首先,它是has_many :students
,因此它应该是accepts_nested_attributes_for :students
而不是accepts_nested_attributes_for :student
。
其次,如果我正确理解了您的问题,那么您正试图update
现有parent(adult) record
,但您最终会创建一个新问题。这就是问题所在吗?如果是这样,您需要允许更新父(成人)记录的:id of the student
。
将您的student_params
方法更改为喜欢此内容
def student_params
params.require(:student).permit(:id,:adult_id, :school_id, :username, :password,
:firstName, :middleName, :lastName,:alias,adult_attributes: [:id, :name])
end