Использование rake db: миграция прямой, ванильный SQL - PullRequest
6 голосов
/ 08 февраля 2011

Какие ошибки могут быть задействованы при использовании rake db:migrate для загрузки ванильного SQL?

Бизнес-требования, с которыми я работаю, не позволяют мне использовать миграции Rails по умолчанию.Но мне все еще нужно отслеживать изменения, легко изменять DDL базы данных и другие вещи, которые дает миграция Rails.

Таким образом, файл миграции будет выглядеть так:

class AddDateToPost < ActiveRecord::Migration
  def self.up
    ActiveRecord::Base.connection.execute("ALTER TABLE `posts` ADD COLUMN date DATETIME NULL")
  end

  def self.down
    ActiveRecord::Base.connection.execute("ALTER TABLE `posts` DROP COLUMN date")
  end
end

Ответы [ 2 ]

17 голосов
/ 08 февраля 2011

Это вполне приемлемо, и нет никаких ошибок, если вы уверены, что ваши функции вверх и вниз отражают друг друга. Я бы предложил сделать следующее для удобства чтения:

class AddDateToPost < ActiveRecord::Migration
  def self.up
    execute "ALTER TABLE `posts` ADD COLUMN date DATETIME NULL"
  end

  def self.down
    execute "ALTER TABLE `posts` DROP COLUMN date"
  end
end
0 голосов
/ 19 мая 2014

Вы можете использовать методы миграции Rails в не-rails проекте, используя standalone-migrations gem .

После установки драгоценного камня вы добавляете следующие строки в ваш Rakefile для включения rake db:* задач:

require 'standalone_migrations'
StandaloneMigrations::Tasks.load_tasks

После этого вы просто настраиваете свои миграции как обычно:

class AddDateToPost < ActiveRecord::Migration
  def self.up
    add_columm :posts, :date, :datetime, default: nil
  end

  def self.down
    remove_columm :posts, :date
  end
end
...