Ruby on rails 如何在数据库中插入多条记录
如何使用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
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