如何使用rails语法将多个记录插入数据库。
INSERT INTO users (email,name) VALUES ('a@ao.in','a'),('b@ao.in','b'),
('c@ao.in','c');
这就是我们在MySQL中的做法。如何在Rails中完成?
答案 0 :(得分:14)
查看此博文: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)
答案 1 :(得分:12)
虽然你无法获得那里的确切SQL,但你可以通过在哈希数组上传递create或new来插入多个记录:
new_records = [
{:column => 'value', :column2 => 'value'},
{:column => 'value', :column2 => 'value'}
]
MyModel.create(new_records)
答案 2 :(得分:10)
我在我的项目中使用了以下内容,但它不适合sql注入。 如果您在此查询中未使用用户输入,则它可能适合您
user_string = " ('a@ao.in','a'), ('b@ao.in','b')"
User.connection.insert("INSERT INTO users (email, name) VALUES"+user_string)
答案 3 :(得分:4)
只需使用rails3的rails_ord-import gem或rails 2的ar-extensions
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
答案 4 :(得分:0)
在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
答案 5 :(得分:0)
您可以使用Fast Seeder进行多次插入。
答案 6 :(得分:-1)
只需将一系列哈希值传递给create方法,如下所示:
User.create([{:email => "foo@com", :name => "foo"}, {:email => "bar@com", :name => "bar"}])