Ruby-on-rails-2.1-rails-migrations

提供:Dev Guides
移動先:案内検索

Ruby on Rails 2.1-移行

Rails Migrationは、Rubyを使用してデータベーススキーマの変更を定義するため、バージョン管理システムを使用して、実際のコードとの同期を維持できます。

次のような多くの用途があります-

  • 開発者のチーム-1人がスキーマを変更した場合、他の開発者は「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 -説明などの長いテキストデータ用です。
  • text -説明などの長いテキストデータ用です。
  • 整数-整数用です。
  • float -小数用です。
  • date-time 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]を参照してください。

移行を作成する

移行を作成するための一般的な構文は次のとおりです-

C:\ruby\application> ruby script/generate migration table_name

これにより、db/migrate/001_table_name.rbファイルが作成されます。 移行ファイルには、データベーステーブルのデータ構造を記述する基本的なRuby構文が含まれています。

-移行ジェネレーターを実行する前に、モデルジェネレーターによって生成された既存の移行をクリーンアップすることをお勧めします。

3つのテーブル( booksとsubject . )に対応する2つの移行を作成します。

C:\ruby> cd library
C:\ruby\library> ruby script/generate migration books
C:\ruby\library> ruby script/generate migration subjects

本と件名に小文字を使用し、移行の作成時に複数形を使用していることに注意してください。 これは、移行を作成するたびに従うべきRailsパラダイムです。 −

コードを編集して何をすべきかを伝える

アプリケーションのdb/migrateサブディレクトリに移動し、シンプルなテキストエディターを使用して各ファイルを1つずつ編集します。

次のように001_books.rbを変更します-

ID列は自動的に作成されるため、ここでも実行しないでください。

class Books < ActiveRecord::Migration
   def self.up
      create_table :books do |t|
         t.string     :title, :limit => 32, :null => false
         t.float      :price
         t.integer    :subject_id
         t.text       :description
         t.timestamp  :created_at
      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.string :name
      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_ テーブルの作成に使用されます。 subjectテーブルに5つのレコードを作成します。

移行を実行する

必要なすべての移行ファイルを作成したので、今度はデータベースに対してそれらを実行します。 これを行うには、コマンドプロンプトに移動し、アプリケーションが配置されているライブラリディレクトリを開き、次のように rake migrate と入力します-

C:\ruby\library> rake db:migrate

これにより、「schema_info」テーブルが存在しない場合は作成され、現在のバージョンのデータベースが追跡されます。 データベースが現在のバージョンになるまで、新しい移行はそれぞれ新しいバージョンになり、新しい移行はすべて実行されます。

Rakeは、データベース構造の更新などの複雑なタスクの実行を簡素化するために、Railsが利用するUnix makeプログラムに類似したRubyビルドプログラムです。

本番データベースとテストデータベースの移行の実行

移行に使用するRails環境を指定する場合は、RAILS_ENVシェル変数を使用します。

たとえば-

C:\ruby\library> set RAILS_ENV=production
C:\ruby\library> rake db:migrate
C:\ruby\library> set RAILS_ENV=test
C:\ruby\library> rake db:migrate
C:\ruby\library> set RAILS_ENV=development
C:\ruby\library> rake db:migrate

-Unixでは、_set_コマンドの代わりに「export RAILS_ENV = production」を使用します。

次は何ですか?

これで、データベースと必要なテーブルが利用可能になりました。 後続の2つの章では、コントローラー(ActionController)およびビュー(ActionView)と呼ばれる2つの重要なコンポーネントについて説明します。

  • コントローラーの作成(アクションコントローラー)
  • ビューの作成(アクションビュー)