Вложенные формы Rails: как обновить родительские атрибуты из дочерней формы - PullRequest
0 голосов
/ 09 января 2019

У меня есть Contract модель-родитель, у которой Job Contract модель-потомок. Таблица Contract похожа на базовую таблицу, а таблица Job Contract - это детали этого базового контракта, которые могут быть расширены в будущем.

class Contract < ApplicationRecord
 has_one :job_contract, dependent: :nullify
 after_create :create_job_application_contract

 def create_job_application_contract
  JobContract.create(contract_id: self.id)
 end
end

class JobContract < ApplicationRecord
  belongs_to :contract, optional: true
end

Я хочу обновить родительскую Contract из дочерней Job Contract формы, поэтому я использую вложенные атрибуты в Job Contract форме

class JobContract < ApplicationRecord
 belongs_to :contract, optional: true
 accepts_nested_attributes_for :contract
end

# edit.html.slim
= simple_form_for @job_contract do |f|
  = f.simple_fields_for :contract do |c|
   = c.input :salary

Однако это создает новый Contract с каждым отправлением формы Job Contract. Могу ли я использовать вложенные атрибуты потомка для изменения родителя? Мой текущий план состоит в том, чтобы просто использовать кнопку ajax для обновления Contract из Job Contract формы

1 Ответ

0 голосов
/ 09 января 2019

В конце концов, я не использовал ни вложенность, ни Ajax.

Я просто помещаю все в форму Job Contract, используя attr_accessor, затем обновляю родительский элемент Contract в действии обновления дочернего элемента

class JobContract < ApplicationRecord
 belongs_to :contract, optional: true
 attr_accessor :salary
end

# edit.html.slim
= simple_form_for @job_contract do |f|
  = f.input :salary

# job_contract_controller
if @job_contract.update(job_contract_params)
  @contract.update(contract_value: @job_contract.salary)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...