class ActiveRecord::Base
Public Class Methods
bulk_insert!(record_list)
click to toggle source
# File lib/notifiable/active_record.rb, line 5 def self.bulk_insert!(record_list) return if record_list.empty? adapter_type = connection.adapter_name.downcase.to_sym case adapter_type when :postgresql self.connection.execute(postgresql_bulk_insert_sql(record_list)) else self.default_bulk_insert(record_list) end end
Protected Class Methods
convert_record_list(record_list)
click to toggle source
# File lib/notifiable/active_record.rb, line 18 def self.convert_record_list(record_list) key_list = record_list.map(&:keys).flatten.uniq.sort value_list = record_list.map do |rec| list = [] key_list.each {|key| list << ActiveRecord::Base.connection.quote(rec[key]) } list end return [key_list, value_list] end
default_bulk_insert(record_list)
click to toggle source
# File lib/notifiable/active_record.rb, line 35 def self.default_bulk_insert(record_list) ActiveRecord::Base.transaction do record_list.each{|record| Notifiable::NotificationStatus.create(record) } end end
postgresql_bulk_insert_sql(record_list)
click to toggle source
# File lib/notifiable/active_record.rb, line 30 def self.postgresql_bulk_insert_sql(record_list) key_list, value_list = convert_record_list(record_list) "INSERT INTO #{self.table_name} (#{key_list.join(", ")}) VALUES #{value_list.map {|rec| "(#{rec.join(", ")})" }.join(" ,")}" end