Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.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 ActiveRecord:保存多个对象时跳过验证_Ruby On Rails_Activerecord - Fatal编程技术网

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最适合我,因为它只生成一个插入。