Rails嵌套表单:如何从子表单更新父属性

时间:2019-01-09 04:59:18

标签: ruby-on-rails

我有一个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 :(得分:0)

最后,我没有使用嵌套或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