ActiveRecord:保存多个对象时跳过验证

时间:2016-08-21 12:14:22

标签: ruby-on-rails activerecord

我知道我可以跳过个人保存的验证,如下所示:

User.new(name: 'John').save(validate: false)

但是在一次保存多个对象时如何才能这样做?像这样:

Category.create([
  { name: 'Apps' },
  { name: 'Songs' },
  { name: 'Movies' }
])

2 个答案:

答案 0 :(得分:5)

我找到了这个宝石:https://github.com/zdennis/activerecord-import

它的工作原理如下:

categories = [ 
  Category.new(name: 'Apps'),
  Category.new(name: 'Songs'),
  Category.new(name: 'Movies')
]

Category.import(categories, validate: false)

It is also possible to use plain arrays instead of ActiveRecord objects.

我猜它会在 validate 设置为false时生成纯SQL,因此可以跳过验证。

答案 1 :(得分:3)

create无法做到这一点。如果你真的必须跳过验证,你可以这样做:

[
  { name: 'Apps' },
  { name: 'Songs' },
  { name: 'Movies' }
].each do |attributes|
  c = Category.new(attributes)
  s.save(validate: false)
end