You should avoid using application models in your migrations. But how else could you create records in a migration?
The most basic way is to write plain SQL, but since INSERT statements are no pleasant write for Rubyists, here is a simple wrapper:
Record creation helper for migrations
The helper method below takes a table name and a hash of attributes, which it inserts into the specified table. Copy it over to your migration and profit!
private
def insert_record(table, **attributes)
attributes.merge!(
updated_at: Time.now,
created_at: Time.now,
)
insert <<-SQL.squish
INSERT INTO #{table}
(#{attributes.keys.join ', '})
VALUES
(#{attributes.values.map(&connection.method(:quote)).join ', '})
SQL
end
Usage example:
insert_record 'users', name: 'joe', age: 15
Also see Rails: Talking to the database without instantiating ActiveRecord objects.
Posted by Dominik Schöler to makandra dev (2017-11-27 09:39)