Вопрос

В настоящее время я могу создать нескольких учеников через свою форму для взрослых, используя 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

КОНТРОЛЛЕР

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
Это было полезно?

Решение

Во-первых, это 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 

Другие советы

Я не уверен в этом решении, но оно может сработать...

Попробуйте использовать @parent.update_attributes вместо создания отдельной родительской формы отправьте родительские параметры вместе с параметрами ученика.Возможно, вам потребуется определить parent_params() функционируйте, чтобы разрешить их.

** Я полагаю, что параметры разрешения будут отфильтровывать запрещенные, поэтому вам не нужно будет указывать только поля "ученик" или "родители" для их учета update_attributes.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top