3

テーブルを作成し、いくつかのインデックスを追加する移行を作成しようとしています。

これは移行です:

class CreatePages < ActiveRecord::Migration
  def change
    create_table :pages do |t|
        t.string "name", :limit => 50
        t.string "permalink"
        t.integer "position"
        t.boolean "visible"
        t.integer "subject_id"

        add_index("pages","subject_id")
        add_index("pages","name")

      t.timestamps
    end
  end
end

この移行を実行しようとすると、次のエラーが発生します。

PG ::エラー:エラー:リレーション "pages"が存在しません:CREATE INDEX "index_pages_on_subject_id" ON "pages"( "subject_id")

誰かが私が間違っていることを教えてもらえますか?

ありがとう!

4

1 に答える 1

4

add_indexブロックの外側でメソッドを呼び出すcreate_tableか、ブロック内でメソッドを呼び出す必要がありindexます。

最初の方法:

class CreatePages < ActiveRecord::Migration
  def change
    create_table :pages do |t|
        t.string "name", :limit => 50
        t.string "permalink"
        t.integer "position"
        t.boolean "visible"
        t.integer "subject_id"

      t.timestamps
    end

    add_index("pages","subject_id")
    add_index("pages","name")
  end
end

2 番目の方法:

class CreatePages < ActiveRecord::Migration
  def change
    create_table :pages do |t|
        t.string "name", :limit => 50
        t.string "permalink"
        t.integer "position"
        t.boolean "visible"
        t.integer "subject_id"
        t.index("subject_id")
        t.index("name")

      t.timestamps
    end


  end
end

これははるかにきれいなので、個人的には2番目を選びます。

于 2012-10-20T16:21:19.280 に答える