Skip to content

Instantly share code, notes, and snippets.

@ochko
Forked from janko/arel.rb
Last active April 6, 2022 18:39
Show Gist options
  • Save ochko/d8ecc6a73e58175a05f04421c977b979 to your computer and use it in GitHub Desktop.
Save ochko/d8ecc6a73e58175a05f04421c977b979 to your computer and use it in GitHub Desktop.
Insert statement in Arel
def insert_sql_for(table_name, data)
stmt = Arel::Nodes::InsertStatement.new
stmt.relation = Arel::Table.new(table_name)
stmt.columns = data.keys.map { |k| Arel::Table.new(table_name)[k] }
stmt.values = Arel::Nodes::Values.new(data.values, stmt.columns)
stmt.to_sql
end
require "active_record"
ActiveRecord::Base.establish_connection("postgres:///db")
ActiveRecord::Base.connection.execute(insert_sql_for :movies, data)
@jairovm
Copy link

jairovm commented Apr 6, 2022

This worked for me on Rails 6

table = Arel::Table.new(:users)
manager = Arel::InsertManager.new
manager.insert [[table[:email], "test@example.com"]]
User.connection.insert(manager.to_sql)

(5.5ms)  INSERT INTO `users` (`email`) VALUES ('test@example.com')
=> 10 # Assigned ID

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment