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

时间:2011-04-27 11:57:42

标签: ruby-on-rails activerecord

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

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

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

7 个答案:

答案 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)

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

答案 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"}])