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

Joã*_*uza 3 activerecord ruby-on-rails

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

User.new(name: 'John').save(validate: false)
Run Code Online (Sandbox Code Playgroud)

但是,一次保存多个对象时该怎么办?像这样:

Category.create([
  { name: 'Apps' },
  { name: 'Songs' },
  { name: 'Movies' }
])
Run Code Online (Sandbox Code Playgroud)

Joã*_*uza 6

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

它是这样的:

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

Category.import(categories, validate: false)
Run Code Online (Sandbox Code Playgroud)

也可以使用纯数组而不是ActiveRecord对象。

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


Mic*_*iak 5

你不能用create. 如果您真的必须跳过验证,您可以执行以下操作:

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