【问题标题】:Rails nested forms: How to update the parent attributes from a child formRails 嵌套表单:如何从子表单更新父属性
【发布时间】:2019-01-09 04:59:17
【问题描述】:

我有一个 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

我想从子 Job Contract 表单更新父 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

但是,这会在每次提交 Job Contract 表单时创建一个新的 Contract。我可以使用子级的嵌套属性来修改父级吗?我目前的计划是使用 ajax 按钮从 Job Contract 表单更新 Contract

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    最后,我没有使用嵌套,也没有使用 Ajax。

    我只是使用attr_accessor 将所有内容放入Job Contract 表单中,然后在孩子的更新操作中更新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
    

    【讨论】:

      猜你喜欢
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多