mysql – 如何在Active Record中检索批量插入的已创建ID列表?
作者:互联网
我有三个型号:
class Coupon < ActiveRecord::Base
belongs_to :event
has_many :coupon_events, :dependent => :destroy
has_many :events, :through => :coupon_events
end
class Event < ActiveRecord::Base
belongs_to :event
has_many :coupon_events, :dependent => :destroy
has_many :coupons, :through => :coupon_events
end
class CouponEvent < ActiveRecord::Base
belongs_to :coupon
belongs_to :event
end
我通读了一个CSV文件来创建优惠券和coupon_events.这非常低效,因为记录一次创建一个并导致多个查询,每个查询包括两个插入语句.
我想使用这样的单个插入查询:
coupon_string = " ('abc','AAA'), ('123','BBB')"
Coupon.connection.insert("INSERT INTO coupons (code, name) VALUES"+coupon_string)
然后我需要为CouponEvent模型创建第二个插入查询,但我需要一个返回的coupon_ids列表.是否有内置方法在插入时检索ID?
解决方法:
如果您使用的是mysql并且未在其他脚本/进程中插入更多行,则可以使用last_insert_id()获取插入的第一行的id
first_id = ActiveRecord::Base.connection.execute("select last_insert_id()").first[0]
然后顺序生成其他记录的ID.
即
data = %w(one two three)
to_insert = "('" + data.join("'), ('") + "')"
Model.connection.insert("INSERT INTO models(name) VALUES #{to_insert}")
first_id = ActiveRecord::Base.connection.execute("select last_insert_id()").first[0].to_i
hash = {}
data.each_with_index {|d, i| hash[first_id + i] = d}
标签:mysql,insert,ruby-on-rails,activerecord,has-many 来源: https://codeday.me/bug/20190529/1180518.html