Ruby on rails 有一个嵌套关联会使编辑路由上的外键无效

Ruby on rails 有一个嵌套关联会使编辑路由上的外键无效,ruby-on-rails,nested-attributes,has-one,Ruby On Rails,Nested Attributes,Has One,我正在RubyonRails中构建一个嵌套表单 添加嵌套的具有一个关联可以正常工作。但是,当我加载编辑页面时,嵌套关联的外键company\u id将无效 我在中尝试了update\u only:true为接受嵌套的属性,并按照stackoverflow的其他类似问题中的建议在强参数中包含:id,但对我来说没有任何效果 谁能告诉我是什么导致嵌套关联更新并使其外键本身无效?我的代码如下所示。谢谢 # company.rb class Company < ApplicationRecord

我正在RubyonRails中构建一个嵌套表单

添加嵌套的
具有一个
关联可以正常工作。但是,当我加载编辑页面时,嵌套关联的外键
company\u id
将无效

我在
中尝试了
update\u only:true
接受嵌套的属性,并按照stackoverflow的其他类似问题中的建议在强参数中包含:id,但对我来说没有任何效果

谁能告诉我是什么导致嵌套关联更新并使其外键本身无效?我的代码如下所示。谢谢

# company.rb
class Company < ApplicationRecord
  has_one :mission
  accepts_nested_attributes_for :mission, update_only: true
end

# mission.rb
class Mission < ApplicationRecord
  belongs_to :company, optional: true
  validates :description, presence: true, length: { maximum: 100 }
end

# companies_controller.rb
class CompaniesController < ApplicationController
  def edit
    @company = Company.find(params[:id])
    @company.build_mission if @company.build_mission.nil?
  end

  def update
    @company = Company.find(params[:id])
    @company.assign_attributes(company_params)
    if @company.valid?
      @company.save
      redirect_to companies_path
    end
  end

  private

  def company_params
    params.require(:company).permit(mission_attributes: [:id, :description, :_destroy])
  end
end

# edit.html.erb
<%= form_for @company, :url => company_path(@company), :html => {class: 'ui form', method: :put} do |f| %>
  <%= f.fields_for :mission do |mission| %>
    <div class="field">
      <%= mission.label :mission %>
      <%= mission.text_field :description %>
    </div>
  <% end %>
  <%= f.button :submit => "", class: "ui button" %>
<% end %>
#company.rb
类别公司<申请记录
有一个:使命
接受任务的\u嵌套\u属性\u,仅更新\u:true
结束
#mission.rb
类任务<应用程序记录
属于:公司,可选:true
验证:description,presence:true,length:{maximum:100}
结束
#公司(u controller.rb)
类CompaniesController{class:'ui-form',方法::put}do | f |%>
“”类:“ui按钮”%>

嘿,睡了一个好觉后,我设法解决了这个问题。事实证明,我只需要在公司控制器级别处理if-else条件。编辑方法应修改为:-

def edit
  @company = Company.find(params[:id])
  if @company.mission
  else
    @company.build_mission
  end
end