如何将多条记录插入数据库
如何使用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"}])