Mysql ActiveRecord大容量插入具有\u 1
您是否解决过使用嵌套关联批量插入记录的问题? (使用rails insert_all或导入gem) 例如: 及 如果狗有主人协会,则不起作用Mysql ActiveRecord大容量插入具有\u 1,mysql,ruby-on-rails,activerecord,Mysql,Ruby On Rails,Activerecord,您是否解决过使用嵌套关联批量插入记录的问题? (使用rails insert_all或导入gem) 例如: 及 如果狗有主人协会,则不起作用 has_one :owner, class_name: Person 希望所有的狗和它们的主人都能坚持下去。你有两种可能 删除所有约束,插入所有数据,并在末尾添加约束。这是因为在备份时,所有约束都起作用,并且在恢复后也会起作用 一次只能插入一个表,因此您可以为数据库创建一个ER模型,查看必须首先创建哪些表,以便可以使用已使用POUT创建的伙伴表创建上面层
has_one :owner, class_name: Person
希望所有的狗和它们的主人都能坚持下去。你有两种可能
您必须单独插入关联
我已经在我的博客中解释了我是如何解决这个问题的-有一个叫做DutyFree的宝石,它使这类事情变得简单。假设有一个模式,其中包含三个类别、子类别和餐厅表:
___________ _____________ _____________
|Category | |Subcategory| |Restaurant |
| | | | | |
| |---->|belongs_to |---->|belongs_to |
| | | Category| |Subcategory|
| | | | | |
¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯
这个gem智能地分析has_many并属于模型上的关联,并基于这些关系确定如何在所有目标表中正确保存每个导入的行。创建或更新都是基于数据是否已经存在以及是否基于每个表来执行的,因此,例如,如果类别已经存在,但子类别或餐厅不存在,则只有这两个部分将被添加并关联到适当的类别
此特定示例可在此处的测试中看到:
对于您的狗和人示例,您需要做的就是将gem放入Gemfile并打包后,打开bin/rails c,然后尝试使用以下工具导出示例:
Person.df_export
它会自动地亲自穿过“归属地”找到他们的相关狗。(顺便说一下,你可以考虑把这个关联转换成狗狗,而不是HasgOne,把它变成一个HasyMulk,这样一个人就可以有很多狗。但是这是另一个故事。如果你把它转过来,那么做DOK.DF出口或者狗狗。
如果您想进一步定制所涉及的列,请让gem为您提供一个入门模板,该模板可以通过以下方式添加到Person模型中:
Person.suggest_template
它显示的IMPORT_模板散列包含有关您希望具有唯一性的列的详细信息,例如此人的电子邮件或电话号码,可能还有狗的生日或其他信息
希望所有这些都能有所帮助。看起来非常不错,虽然我承认无法完全测试解决方案,但会记住它以备下次挑战。谢谢!
Person.df_export
Person.suggest_template