Question

Je travaille sur une application web non Rails, donc pas de script migrations par défaut.

Le Sequel ORM me permet de créer des tables facilement dans 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

Y at-il une todo façon dont cela avec ActiveRecord en dehors des migrations?

Était-ce utile?

La solution

Ma compréhension actuelle est pas, toutes les données de modifications ou d'un schéma doivent être fait par le biais d'une migration. Je un rakefile complet sur github qui peut être utilisé pour effectuer les migrations en dehors des rails.

Par ailleurs, si elle est juste un script d'initialisation pourrait être utilisé comme suit.

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

Autres conseils

Dans Rails 4 au moins (peut-être plus tôt?), Vous pouvez appeler créer Table directement sur une instance ActiveRecord::ConnectionAdapters, en utilisant la même syntaxe que la migration.

Vous pouvez obtenir une connexion pour votre base de données (en supposant que vous avez une seule base de données) en appelant ActiveRecord::Base.connection. Ainsi, le Ruby pour votre exemple ressemblerait à ceci:

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

Remarque: Si vous avez déjà un modèle défini et utilise la même base que celle dans laquelle vous voulez créer la table, vous pouvez saisir un objet de connexion à partir de là au lieu. Pour une large création de la table dans la console, je vais appeler User.connection.create_table simplement parce qu'il est moins taper.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top