Обновление модели и Child удаляет Grandchild :( Rails - PullRequest
0 голосов
/ 01 ноября 2018

у меня есть:

Initial_application.rb

has_one :full_application
has_one :statement, through: :full_application
accepts_nested_attributes_for :application_status
accepts_nested_attributes_for :full_application

Full_application.rb

has_one :statement
has_one :plaid_auth, through: :statement

Statement.rb

has_many_attached :files
belongs_to :full_application, optional: true

Итак, у меня есть - initial_application - full_application (дочерний элемент initial_application) - оператор (потомок full_application, следовательно, внук initial_application)

initial_application_controller.rb

def edit_full
  respond_to do |format|
  format.html
  format.js
  render layout: 'fullapplication_layout'
  end
end

Я создал действие в контроллере для обновления исходного приложения и full_application. Создан вложенный бланк и т. Д., Введены сильные параметры и т. Д.

def initial_application_params
  params.require(:initial_application).permit( :source, :amount, :years, :sales, :creditscore, :email, :name, :phone, :interest, :businessname, application_status_attributes: [:status, :person, :status_name, :status_description, :status_note], full_application_attributes: [:amount, :years, :sales, :creditscore, :email, :phone, :name, :defaults, :existingach, :acceptcc, :seasonal, :balance, :lender, :interest, :street, :apt, :city, :state, :zipcode, :businessname, :bstreet, :bapt, :bcity, :bstate, :bzipcode, :dba, :legalentity, :fedtaxid, :dob, :percentage, :own, :bown, :bphone, :analytics, :source, :credit_auth, :ip ] )
end

edit_full_form.erb

<%= simple_form_for @initial_application do |f| %>
...
<%= f.simple_fields_for :application_status do |p| %>
...
<% end %> 
<%= f.simple_fields_for :full_application do |m| %>
...
<% end %>
<%= f.button :submit, "Update Status", class: "button is-medium" %>
<% end %>

Но когда я обновляю initial_application и full_application с вложенной формой, это удаляет оператор. Я понял проблему, но я не знаю, как это исправить.

Действие «Обновить» создает новую запись full_application, а не обновляет старую full_application.

1 Ответ

0 голосов
/ 01 ноября 2018

Ваша запись full_aplication воссоздается, потому что вы не передаете ее id. Как сказано в документации :

Для каждого хеша, который не имеет ключ id, будет создана новая запись, если только хеш не содержит ключ _destroy, который оценивается как true.

Чтобы исправить это, вам нужно добавить :id во вложенный список разрешенных параметров full_application_attributes и передать этот идентификатор в форму в виде поля hidden_ ​​

.
...