Ruby on rails 如何在数据库中插入多条记录

Ruby on rails 如何在数据库中插入多条记录,ruby-on-rails,activerecord,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中是如何实现的?只需向create方法传递一个哈希数组,如下所示: User.create([{:email => "foo@com", :n

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

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

这就是我们在MySQL中的实现方式。这在Rails中是如何实现的?

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

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

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

new_records = [
  {:column => 'value', :column2 => 'value'}, 
  {:column => 'value', :column2 => 'value'}
]

MyModel.create(new_records)

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

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

查看此博客帖子:

根据您的rails版本,使用activerecord导入0.2.6(适用于rails 3)和ar扩展0.9.4(适用于rails 2)


作者:

在People\u 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

您可以使用来执行多次插入。

只需将activerecord导入gem用于rails 3或ar扩展用于rails 2即可

在文件中:

gem "activerecord-import"
在模型中:

import "activerecord-import"
在控制器中:

books = []
10.times do |i| 
  books << Book.new(:name => "book #{i}")
end
Book.import books
books=[]
10.我做了多少次
书籍“书籍{i}”)
结束
进口书
此代码通过一次查询导入10条记录;)

#@messages=ActiveSupport::JSON.decode(@content)
@messages=JSON(@content)
#通过一次插入为插入准备数据
字段=[:字段1,:字段2]
项目=[]
@消息。每个do | m|

关于执行这两个插入查询的项目已执行。您最好在问题中注意到这一点。关于执行这两个插入查询,我们如何使它只执行一个插入查询并同时插入两个记录。我认为使用ActiveRecord是不可能的。您可能想看看这篇文章和ar扩展,因为我的rails版本是2.3.5,所以我使用了ar扩展0.9.4。但当我执行这条语句时,两个insert查询仍在执行。阿马尔,你明白了吗?如果没有,请在这里更新您的帖子,以显示您正在做什么,或者用更详细的信息问一个新问题。我可以使用此方法解决我的问题。user_string=“(”a@ao.in","a","a",b@ao.in“,'b')”User.connection.insert(“插入到用户(电子邮件,名称)值中”+用户字符串)。我尝试了这里指定的所有其他方法,但在所有其他情况下,执行了多个insert查询。我有相同的要求,将数据从CSV加载到表中。此解决方案直接回答了所提出的问题,结果只插入了一个。我发现这比单独的
要快得多。对于CSV中的每一行,首先\u或\u initialize()
(此处为Rails 4)。需要注意的是,activerecord导入不会返回插入行的ID。建议使用。gem运行一个查询。
books = []
10.times do |i| 
  books << Book.new(:name => "book #{i}")
end
Book.import books
#@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