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