Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.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/25.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 在一个事务下创建和更新多个模型_Ruby On Rails_Ruby_Transactions - Fatal编程技术网

Ruby on rails 在一个事务下创建和更新多个模型

Ruby on rails 在一个事务下创建和更新多个模型,ruby-on-rails,ruby,transactions,Ruby On Rails,Ruby,Transactions,我想知道rails是否可以在一个事务下进行多个更新和创建 我想从任何数组创建一个数量的产品。但对于每个产品,我还需要为其创建公司和类别 所以这个想法是这样的 -- Start a transaction //create a company //create a category while product_list { //create a product with company and category created above } -- end a transcation 因此

我想知道rails是否可以在一个事务下进行多个更新和创建

我想从任何数组创建一个数量的
产品
。但对于每个产品,我还需要为其创建
公司
类别

所以这个想法是这样的

-- Start a transaction
//create a company
//create a category
while product_list
{
   //create a product with company and category created above
}
-- end a transcation

因此,如果任何创建失败,我希望较早的更新/创建回滚。

顺便问一下,我们用于回滚事务的命令是什么?事务中的raise ActiveRecord::rollback将导致回滚。(此异常不会传播到事务块之外,因此您不需要捕获它)
begin
  ActiveRecord::Base.transaction do
    # create a company
    # create a category
    while product_list
    {
      # create a product with company and category created above
    }
  end
rescue => e
  # something went wrong, transaction rolled back
end