如何将多条记录插入数据库

如何使用rails语法将多个记录插入数据库。

INSERT INTO users (email,name) VALUES ('a@ao.in','a'),('b@ao.in','b'), ('c@ao.in','c'); 

这就是我们在MySQL中的做法。 这是如何在Rails中完成的?

我在我的项目中使用了以下内容,但它不适合sql注入。 如果您在此查询中未使用用户输入,则它可能适合您

 user_string = " ('a@ao.in','a'), ('b@ao.in','b')" User.connection.insert("INSERT INTO users (email, name) VALUES"+user_string) 

看看这篇博文: http : //www.igvita.com/2007/07/11/efficient-updates-data-import-in-rails/

 widgets = [ Widget.new(:title => 'gizmo', :price => 5), Widget.new(:title => 'super-gizmo', :price => 10)] Widget.import widgets 

根据您的rails版本,使用activerecord-import 0.2.6(对于Rails 3)和ar-extensions 0.9.4(对于Rails 2)

来自作者: http : //www.continuousthinking.com/tags/arext

虽然您无法获得那里的确切SQL,但您可以通过在哈希数组上传递create或new来插入多个记录:

 new_records = [ {:column => 'value', :column2 => 'value'}, {:column => 'value', :column2 => 'value'} ] MyModel.create(new_records) 

只需使用activerecord-import gem for rails 3或ar-extension for rails 2

https://github.com/zdennis/activerecord-import/wiki

在Gemfile中:

 gem "activerecord-import" 

在模型中:

 import "activerecord-import" 

在控制器中:

 books = [] 10.times do |i| books << Book.new(:name => "book #{i}") end Book.import books 

此代码通过一个查询导入10条记录;)

要么

 #@messages = ActiveSupport::JSON.decode(@content) @messages = JSON(@content) #prepare data for insert by one insert fields = [:field1, :field2] items = [] @messages.each do |m| items << [m["field1"], m["field2"]] end Message.import fields, items 

您可以使用快速播种机进行多次插入。

在People_controller.rb中

 # POST people NAMES = ["Sokly","Nary","Mealea"] def create Person.transaction do NAMES.each do |name| @name = Person.create(:name => name) @name.save end end end 

只需将一个哈希数组传递给create方法,如下所示:

 User.create([{:email => "foo@com", :name => "foo"}, {:email => "bar@com", :name => "bar"}])