在 ruby​​ 中批量创建具有嵌套属性的对象

Bra*_*ira 3 ruby ruby-on-rails

我们在创建新应用程序时遇到问题。我们有两种模式:套餐和产品,一个套餐有很多产品。我们需要创建一个可以批量创建包的控制器,因此我们开始使用允许批量创建的 activerecord-import gem。但问题是 gem 不允许使用嵌套属性来创建产品,这意味着我无法为每个包创建相应的产品。有没有人遇到过类似的问题或有任何潜在的优雅解决方案?

控制器的 JSON 类似于以下内容。

{
  packages: [
    {
      weight: 'x',
      products_attributes: [
        {
          code: x
        },
        {
          code: x
        }
      ]
    },
    {
      weight: 'y',
      products_attributes: [
        {
          code: y
        },
        {
          code: y
        }
      ]
    },
  ]
}
Run Code Online (Sandbox Code Playgroud)

小智 7

books = 10.times.map do |i|
  book = Book.new(name: "book #{i}")
  book.reviews.build(title: "Excellent")
  book 
end
Book.import books, recursive: true
Run Code Online (Sandbox Code Playgroud)

您可以尝试此操作,迭代哈希并为包构建对象,并为每个包迭代产品并构建分配给包对象的产品对象。另一种方法是构建原始 SQL,但这更难