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