Ruby-on-rails-rails-migrations
Ruby on Rails-移行
Rails Migrationを使用すると、Rubyを使用してデータベーススキーマの変更を定義できるため、バージョン管理システムを使用して実際のコードとの同期を保つことができます。
これには、次のような多くの用途があります-
- 開発者のチーム-一人がスキーマを変更した場合、他の開発者は「rake migrate」を更新して実行するだけです。
- 本稼働サーバー-データベースを最新の状態にするために新しいリリースをロールアウトするときに「rake migrate」を実行します。
- 複数のマシン-デスクトップとラップトップの両方で開発する場合、または複数の場所で開発する場合、移行によりすべてのマシンの同期を保つことができます。
Railsの移行でできること
- create_table(名前、オプション)
- drop_table(name)
- rename_table(old_name、new_name)
- add_column(table_name、column_name、type、options)
- rename_column(table_name、column_name、new_column_name)
- change_column(table_name、column_name、type、options)
- remove_column(table_name、column_name)
- add_index(table_name、column_name、index_type)
- remove_index(table_name、column_name)
移行はすべての基本的なデータ型をサポートします-以下は移行がサポートするデータ型のリストです-
- string -タイトルなどの小さなデータ型用。
- text -説明などの長いテキストデータ用。
- 整数-整数の場合。
- float -小数用。
- datetime and timestamp -日付と時刻を列に保存します。
- 日付と時刻-日付のみまたは時刻のみを保存します。
- バイナリ-画像、音声、映画などのデータを保存します。
- Boolean -trueまたはfalseの値を保存します。
- 有効な列オプションは*です-以下は有効な列オプションのリストです。
- limit (:limit ⇒“ 50”)
- default (:default ⇒“ blah”)
- null (:null ⇒ falseはNOT NULLを意味します)
注-Rails移行によって行われるアクティビティは、フロントエンドGUIを使用して、または直接SQLプロンプトで実行できますが、Rails移行はこれらのすべてのアクティビティを非常に簡単にします。
これらの詳細については、http://api.rubyonrails.org/classes/ActiveRecord/Migrationl [Rails API]を参照してください。
移行を作成する
移行を作成するための一般的な構文は次のとおりです-
application_dir> rails generate migration table_name
これにより、db/migrate/001_table_name.rbファイルが作成されます。 移行ファイルには、データベーステーブルのデータ構造を記述する基本的なRuby構文が含まれています。
注-移行ジェネレーターを実行する前に、モデルジェネレーターによって生成された既存の移行をクリーンアップすることをお勧めします。
3つのテーブル( booksとsubject )に対応する2つの移行を作成します。
書籍の移行は次のようにする必要があります-
tp> cd library
library> rails generate migration books
上記のコマンドは、次のコードを生成します。
件名の移行は次のようになります-
tp> cd library
library> rails generate migration subjects
上記のコマンドは、次のコードを生成します。
移行の作成中に、本と件名および複数形に小文字を使用していることに注意してください。 これは、移行を作成するたびに従うべきRailsパラダイムです。
コードを編集する
アプリケーションのdb/migrateサブディレクトリに移動し、シンプルなテキストエディターを使用して各ファイルを1つずつ編集します。
次のように001_books.rbを変更します-
ID列は自動的に作成されるため、ここでも実行しないでください。
class Books < ActiveRecord::Migration
def self.up
create_table :books do |t|
t.column :title, :string, :limit => 32, :null => false
t.column :price, :float
t.column :subject_id, :integer
t.column :description, :text
t.column :created_at, :timestamp
end
end
def self.down
drop_table :books
end
end
メソッド self.up は新しいバージョンに移行するときに使用され、 self.down は必要に応じて変更をロールバックするために使用されます。 現時点では、上記のスクリプトを使用して books テーブルを作成します。
次のように002_subjects.rbを変更します-
class Subjects < ActiveRecord::Migration
def self.up
create_table :subjects do |t|
t.column :name, :string
end
Subject.create :name => "Physics"
Subject.create :name => "Mathematics"
Subject.create :name => "Chemistry"
Subject.create :name => "Psychology"
Subject.create :name => "Geography"
end
def self.down
drop_table :subjects
end
end
上記のスクリプトを使用して subjects テーブルを作成し、subjectsテーブルに5つのレコードを作成します。
移行を実行する
これで、必要な移行ファイルがすべて作成されました。 データベースに対してそれらを実行する時が来ました。 これを行うには、コマンドプロンプトに移動し、アプリケーションが配置されているライブラリディレクトリに移動して、次のように rake migrate と入力します-
library> rake db:migrate
これにより、存在しない場合は「schema_info」テーブルが作成され、データベースの現在のバージョンが追跡されます。新しい移行はそれぞれ新しいバージョンになり、データベースが現在のバージョンになるまで新しい移行が実行されます。
*Rake* は、データベース構造の更新などの複雑なタスクの実行を簡素化するために、Railsが利用するUnix _make_プログラムに類似したRubyビルドプログラムです。
本番データベースとテストデータベースの移行の実行
移行に使用するRails環境を指定する場合は、RAILS_ENVシェル変数を使用します。
たとえば-
library> export RAILS_ENV = production
library> rake db:migrate
library> export RAILS_ENV = test
library> rake db:migrate
library> export RAILS_ENV = development
library> rake db:migrate
注-Windowsでは、_export_コマンドの代わりに「set RAILS_ENV = production」を使用します。
次は何ですか?
これで、データベースと必要なテーブルが利用可能になりました。 後続の2つの章では、コントローラー(ActionController)およびビュー(ActionView)と呼ばれる2つの重要なコンポーネントについて説明します。
- コントローラーの作成(アクションコントローラー)。
- ビューの作成(アクションビュー)。