fc2ブログ

2023.08 «  - - - - - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 » 2023.10
TOP > migration初体験04【migrationファイルを使ってDBを変更】

 ← migration初体験05【追加カラムを編集できるようにviewをいじる】 | TOP | migration初体験03【現在のDBテーブルをmigrationファイルに反映】

migration初体験04【migrationファイルを使ってDBを変更】 

2007年06月05日 ()
さて、いよいよ準備したmigrationファイルを使って、DBを変更します。

長引いてしまってすっかり忘れてもうたのですが、何のカラムを追加したかったかというと、価格カラムと、作者の性別カラムを加えたかったのでした。

価格カラムは、整数型・デフォルト値 0・nullは許さない
作者の性別カラムは、文字列型(1)・デフォルト値 m・nullは許さない

にしたいと思います。

それから作者の性別は、m が男を、f が女を画面上で表すようにしたいです。

というわけで、migration ファイルに追加する行は、みようみまねで、

      t.column "price", :integer, :default => 0, :null => false
      t.column "gender", :string, :limit => 1, :default => "m", :null => false



でしょうね。おそらくは。(勘でやってしまえそうなところが rails のスゴいところかもしれません)

そんな訳で、新しくなった migration ファイルは

class NewColumnsOnBooks < ActiveRecord::Migration
  def self.up
    create_table "books", :force => true do |t|
      t.column "title", :string, :limit => 400, :default => "(no title)", :null => false
      t.column "author", :string, :limit => 500, :default => "(no author)", :null => false
      t.column "price", :integer, :default => 0, :null => false
      t.column "gender", :string, :limit => 1, :default => "m", :null => false
    end
  end

  def self.down
  end
end



となりました。あとは、

# rake migrate



と入力してみましょう。

== NewColumnsOnBooks: migrating ===============================================
-- create_table("books", {:force=>true})
-> 0.1523s
== NewColumnsOnBooks: migrated (0.1579s) ======================================

The rake task migrate has been deprecated, please use the replacement version db:migrate



と、またエラーがでました。がくりくりくり。

コマンドがナウくないらしいので、いわれた通りにコマンドを打ち直します。

# rake db:migrate



はい、なんのメッセージも表示されないで、終了しました。何が起きたかわかんないよー。

でも、booksテーブルを確認したら、priceカラムとgenderカラムが増えていました。

そして、schema_infoというテーブルも増えていました。

これは、rake db:migrate のバージョンが今なんだろうか、という管理をするテーブルだそうです。

しかしここで大問題発生!!booksテーブルに入っていたデータがすべて消えました。がくりくりくり。

どうやら、migration ファイルに入っていた記述 :force => true のせいのようです。

では、データを消さずに migration するには、どうしたらいいか、というと、add_column っつーのを使えばいいそうです。

その場合の migration ファイルの中身は、こんな感じ↓になると思います。

class NewColumnsOnBooks < ActiveRecord::Migration
  def self.up
    add_column "books", "price", :integer, :default => 0, :null => false
    add_column "books", "gender", :string, :limit => 1, :default => "m", :null => false
  end

  def self.down
  end
end



遠回りをしてしまったようですが、まあ、落ち着くべきところに落ち着いたという感じですか。

で、ど素人の私は、rake migrate をすると、追加したカラムの分だけ画面表示も勝手に変えてくれると思ったのですが、そうは問屋がおろさない、というわけで、手動で画面とか model とかを直さなくてはならないです。

というのは次回にやりたいと思います。

【広告】

[2007.06.05(Tue) 02:04] migration初体験Trackback(0) | Comments(0)
↑TOPへ

 ← migration初体験05【追加カラムを編集できるようにviewをいじる】 | TOP | migration初体験03【現在のDBテーブルをmigrationファイルに反映】

COMMENT

COMMENT POST















管理者にだけ表示

 ← migration初体験05【追加カラムを編集できるようにviewをいじる】 | TOP | migration初体験03【現在のDBテーブルをmigrationファイルに反映】