Ruby on rails ActiveRecord:保存多个对象时跳过验证
我知道我可以跳过单个存储的验证,如下所示:Ruby on rails ActiveRecord:保存多个对象时跳过验证,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我知道我可以跳过单个存储的验证,如下所示: User.new(name: 'John').save(validate: false) [ { name: 'Apps' }, { name: 'Songs' }, { name: 'Movies' } ].each do |attributes| c = Category.new(attributes) s.save(validate: false) end categories = [ Category.new(na
User.new(name: 'John').save(validate: false)
[
{ name: 'Apps' },
{ name: 'Songs' },
{ name: 'Movies' }
].each do |attributes|
c = Category.new(attributes)
s.save(validate: false)
end
categories = [
Category.new(name: 'Apps'),
Category.new(name: 'Songs'),
Category.new(name: 'Movies')
]
Category.import(categories, validate: false)
但是,当一次保存多个对象时,如何才能做到这一点?像这样:
Category.create([
{ name: 'Apps' },
{ name: 'Songs' },
{ name: 'Movies' }
])
使用
create
无法执行此操作。如果您确实必须跳过验证,可以执行以下操作:
User.new(name: 'John').save(validate: false)
[
{ name: 'Apps' },
{ name: 'Songs' },
{ name: 'Movies' }
].each do |attributes|
c = Category.new(attributes)
s.save(validate: false)
end
categories = [
Category.new(name: 'Apps'),
Category.new(name: 'Songs'),
Category.new(name: 'Movies')
]
Category.import(categories, validate: false)
我发现了这个宝石:
它的工作原理如下:
User.new(name: 'John').save(validate: false)
[
{ name: 'Apps' },
{ name: 'Songs' },
{ name: 'Movies' }
].each do |attributes|
c = Category.new(attributes)
s.save(validate: false)
end
categories = [
Category.new(name: 'Apps'),
Category.new(name: 'Songs'),
Category.new(name: 'Movies')
]
Category.import(categories, validate: false)
我猜当validate设置为false时,它会生成纯SQL,因此它可以跳过验证。感谢您指出此备选方案。但是,我需要保存一些长数据集,这样会生成许多SQL插入。gem最适合我,因为它只生成一个插入。