从子表单编辑父类

时间:2014-08-02 02:53:13

标签: ruby ruby-on-rails-4 nested-forms nested-attributes nested-resources

目前,我可以使用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

2 个答案:

答案 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