¿Puede ActiveRecord crear tablas fuera de una migration?

Estoy trabajando en una aplicación web que no es Rails, por lo que no hay script de migraciones por defecto.

El ORM de Sequel me permite crear tablas fácilmente en un script:

#!/usr/bin/env ruby require 'rubygems' require 'sequel' ## Connect to the database DB = Sequel.sqlite('./ex1.db') unless DB.table_exists? :posts DB.create_table :posts do primary_key :id varchar :title text :body end end 

¿Hay alguna manera de hacer esto con ActiveRecord fuera de las migraciones?

Mi comprensión actual es no, todos los datos o esquemas de modificaciones deben hacerse a través de una migration. Tengo un file de rastreo completo en github que se puede usar para realizar las migraciones fuera de Rails.

De forma alternativa, si solo se trata de una secuencia de commands de initialization, se podría utilizar lo siguiente.

 ActiveRecord::Base.establish_connection( :adapter => 'sqlite3', :database => './lesson1_AR.db' ) ActiveRecord::Migration.class_eval do create_table :posts do |t| t.string :title t.text :body end create_table :people do |t| t.string :first_name t.string :last_name t.string :short_name end create_table :tags do |t| t.string :tags end end 

En Rails 4 al less (¿posiblemente antes?), Puede invocar create table directamente en una instancia de ActiveRecord::ConnectionAdapters , utilizando la misma syntax que la migration.

Puede get una connection para su database (suponiendo que solo tenga una database) llamando a ActiveRecord::Base.connection . Entonces, el Ruby para su ejemplo se vería así:

 unless ActiveRecord::Base.connection.table_exists?(:posts) ActiveRecord::Base.connection.create_table :posts do |t| # :id is created automatically t.string :title t.text :body end end 

Nota: Si ya tiene un model definido y usa la misma database en la que desea crear la tabla, puede tomar un object de connection desde allí. Para la creación de una tabla única en la console, llamaré a User.connection.create_table simplemente porque es less tipeo.