Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 轨道3。为什么在我转到编辑页面时会删除嵌套记录?_Ruby On Rails_Ruby_Forms_Nested_Has One - Fatal编程技术网

Ruby on rails 轨道3。为什么在我转到编辑页面时会删除嵌套记录?

Ruby on rails 轨道3。为什么在我转到编辑页面时会删除嵌套记录?,ruby-on-rails,ruby,forms,nested,has-one,Ruby On Rails,Ruby,Forms,Nested,Has One,每个公司都应该有一个公司联系人。我的公司表单中有公司联系人字段。当我更新公司并添加新的公司联系人时,它工作正常,因为在公司的显示页面中,它确实显示了新的公司联系人。但是,当我点击编辑链接进入编辑页面时(注意:我甚至还没有点击更新按钮),在编辑公司表单中,公司联系人应该是空的。所以我检查了日志,公司联系人被删除了 从“公司联系人”中删除,其中“公司联系人”。“id”=?[[“id”,4]] 我很困惑,因为我没有调用任何删除操作 ----------------------------------

每个公司都应该有一个公司联系人。我的公司表单中有公司联系人字段。当我更新公司并添加新的公司联系人时,它工作正常,因为在公司的显示页面中,它确实显示了新的公司联系人。但是,当我点击编辑链接进入编辑页面时(注意:我甚至还没有点击更新按钮),在编辑公司表单中,公司联系人应该是空的。所以我检查了日志,公司联系人被删除了

从“公司联系人”中删除,其中“公司联系人”。“id”=?[[“id”,4]]

我很困惑,因为我没有调用任何删除操作

----------------------------------------
company.rb
has_one :company_contact, :dependent => :destroy
accepts_nested_attributes_for :company_contact

----------------------------------------
company_contact.rb
belongs_to :company

----------------------------------------
companies_controller.rb
def new
  @company = Company.new
  company_contact = @company.build_company_contact
  respond_to do |format|
    format.html # new.html.erb
    format.json { render json: @company }
  end
end

def edit
  @company = Company.find(params[:id])
  company_contact = @company.build_company_contact
end

我在ActiveRecord源代码中发现了这一点,这证实了我在上面评论的怀疑(下面代码中的评论是我的):

class HasOneAssociation
每当使用
record.build\u关联时,就会调用此
replace
方法


如果关联记录已经存在,则您的
编辑操作不应生成关联记录。

在编辑操作中,您正在为您的公司生成一个公司联系人,但您的公司只有一个公司联系人。在构建新的前检查是否存在:

company_contact = @company.company_contact || @company.build_company_contact

我猜
@company.build\u company\u contact
会删除关联的记录,如果它存在于
有一个关系。我认为这是合理的,但有点出乎意料。在提供的代码中,没有任何记录保存在db中,所以我看不出如何删除justified@UncleGene我认为认为他发布的代码讲述了整个故事是错误的。他从来没有说过创建操作没有保存记录。因此,我的操作是基于这样的假设,即他正在对那些看起来像我们应该期望的记录执行编辑操作。
company_contact = @company.company_contact || @company.build_company_contact