【问题标题】:Ruby on Rails, creating a many to many association after an activerecord-importRuby on Rails,在 activerecord-import 之后创建多对多关联
【发布时间】:2019-09-17 19:12:45
【问题描述】:

我正在根据用户输入以编程方式创建一些记录,并创建要导入的记录数组。

当我检查数据库时,如果它们是新记录,我可以看到关系已经创建。

如果其中一条记录已存在于数据库中,我可以在关联表中看到以下条目,但我也可以看到新记录已在各自的表中创建,因此它们存在但记录 ID 不存在在关联表中更新。

user_id: 1
keyword_id: null

但如果我第二次运行代码,它将正确添加关系。

这是我的代码

records_to_add = []

words.each do |word|
  keyword = Keyword.find_or_initialize_by(
    word:             word,
    device:           device,
  )
  records_to_add.push(keyword)
end

keywords_added = Keyword.import records_to_add, on_duplicate_key_ignore: true, validate: true

user.keywords << records_to_add

我认为这部分代码有问题

user.keywords << records_to_add

如果其中一条记录已经存在,则表示关系不正确...

【问题讨论】:

    标签: ruby-on-rails ruby activerecord activerecord-import


    【解决方案1】:

    您正在单词循环中调用“find_or_initialize_by”,然后导入这些记录,这会在关键字表中为所有新记录创建一个新行。

    到目前为止,一切都很好。

    然后您的脚本获取第一个列表(持久记录和新记录)并尝试将它们与用户相关联。此时,它会为现有的关键字记录创建关联,但会尝试为刚刚在导入中创建的关键字记录再次创建新的关键字记录并关联这些记录。这些可能在那个时候无法通过唯一的验证,并且没有关联也没有持久化。

    剩下的只是未关联但新创建的记录。

    【讨论】:

    • 那么我需要做些什么来修复它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多