Luc*_*oli 18 ruby ruby-on-rails
我有这样的数组
a = []
a << B.new(:name => "c")
a << B.new(:name => "s")
a << B.new(:name => "e")
a << B.new(:name => "t")
Run Code Online (Sandbox Code Playgroud)
我怎么能立刻保存它?
Ben*_*nns 48
B.transaction do
a.each(&:save!)
end
Run Code Online (Sandbox Code Playgroud)
这将创建一个循环遍历数组的每个元素并在其上调用element.save的事务.
您可以阅读有关ActiveRecord事务以及Rails和Ruby API中的每个方法的信息.
Jor*_*ing 28
a.each(&:save)
Run Code Online (Sandbox Code Playgroud)
这将调用B#save
数组中的每个项目.
小智 11
所以我认为我们需要一个中间立场,让Alexey提高例外并中止交易和Jordan的单线解决方案.我可以建议:
B.transaction do
success = a.map(&:save)
unless success.all?
errored = a.select{|b| !b.errors.blank?}
# do something with the errored values
raise ActiveRecord::Rollback
end
end
Run Code Online (Sandbox Code Playgroud)
这将为您提供两个方面:具有回滚的事务,知道哪些记录失败,甚至可以让您访问其中的验证错误.