0

私はLyndaコースを受講しており、データベースを移行する準備ができています。したがって、最初は、新しいバージョンのRails(3.2.6)のデフォルトとビデオの構文にいくつかの違いがあるように見えますが、Ruby Webサイトを調べて、それはおそらく問題ではないことがわかりました。 。

しかし、私が立ち往生しているのは、Users物を入れる列(属性)を定義するモデルを作成するときに、自分で定義したもの(名、姓、電子メール、パスワード)が取得されないことを除いて、すべてを作成することです作成した。作成日、変更日、IDのみがデフォルトであり、そのまま使用できるためだと思います。

ビデオで使用するように指示されているコードは次のとおりです。

class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.string "first_name", :limit => 25
      t.string "last_name", :limit => 50
      t.string "email", :default => "", :null => false
      t.string "password", :limit => 40
      t.timestamps
    end
  end

  def down
    drop_table :users
  end
end

以下の違いの周りに2つのアスタリスクを付けました。主なものはdef up私のバージョンのデフォルトですが、ビデオバージョンではdef self.upです。Railsサイトのドキュメントを読んだときに気付いたもう一つのことは、引用符の代わりにを使用することになっているということでした:。ビデオで提供されているコードが機能しなかったので、以下のコードも試してみました。しかし、同じ結果が得られましたが、t.strings実際にはテーブルに作成されたものはありませんでした。

class CreateUsers < ActiveRecord::Migration
  **def up**
    create_table :users do |t|
      t.string **:**first_name, :limit => 25
      t.string **:**last_name, :limit => 50
      t.string **:**email, :default => "", :null => false
      t.string **:**"password", :limit => 40
      t.timestamps
    end
  end

  **def down**
    drop_table :users
  end
end

したがって、2つの質問:

  1. 適切な構文を使用していませんか?

  2. 初めてテーブルを「設定」した後、再度設定すると、古い構成が上書きされますか?まったく新しいデータベースを再度作成する必要がありますか?'users'ファイルを変更して構文を再配置し、次にrake db:migrateを実行することで、そこにあるものをすべてオーバーライドできるかどうかはわかりません。

どうもありがとうございました。

-デイブ

4

1 に答える 1

1

シンボルと文字列は関係ありません。Self.up と up は古いスタイルですが、重要ではありません。Rails は、スキーマ移行テーブルで既に実行されている移行を追跡します。この結果、マイグレーションが実行されると、レールを変更したとしても、レールは再度実行されません。

できるよ

rake db:rollback

実行された最後の移行の down メソッドを Rails に実行させる (したがって、次に実行するときに再度実行されますdb:migrate)

新しい移行を作成して追加の列を追加する方が適切な場合があります。元の移行をリポジトリに既にプッシュしている場合は、通常これを行います

于 2012-06-16T09:35:42.487 に答える