1

そのため、レールの移行内で次のコードを使用しています。

    add_column :target_table, :FK, :integer

    execute <<-SQL
      ALTER TABLE target_table
      ADD CONSTRAINT constraint FOREIGN KEY (FK)
      REFERENCES some_table (id)
      ON UPDATE CASCADE ON DELETE RESTRICT
    SQL

そして、優れたプログラマーとして、物事をできるだけ短く、速く保ちたいと思っています。

私はこの言語に慣れていないので、以下のコードが私の SQL と (あらゆる面で) 同等かどうか知りたいです。

    add_column :target_table, :FK, :integer, null: false
    add_index  :targe_table,  :FK

プラス : これらのコードが up メソッド内にある場合、mine down メソッドはどのように見えるべきですか?

- 編集 -

私はいくつかの調査を行い、これを行う3番目の方法について読みました。

    add_column :target_table, :FK, :integer, null: false, references: some_table

それらはすべて同等ですか?Rails の規則は、インデックスに適切な制約を追加しますか? 誰かが違いを教えてくれたら本当にありがたいです。

4

1 に答える 1

1

のようなものを持つ問題

execute <<-SQL
      ALTER TABLE target_table
      ADD CONSTRAINT constraint FOREIGN KEY (FK)
      REFERENCES some_table (id)
      ON UPDATE CASCADE ON DELETE RESTRICT
    SQL

移行ファイルにあるのは、現在使用している SQL または特定のフレーバーの SQL に行き詰まっているということです。あなたが言うように、それを行う適切な方法は

add_index  :targe_table,  :FK

そうすれば、Rails Magic は、使用している SQL のフレーバーを認識し、正しいことを行うことができます。

あなたがするだろうダウンを行うには

remove_index :target_table, :FK

于 2013-10-02T20:00:36.743 に答える