12

テーブルの特定の列の後に列をテーブルに追加しようとしました。ここ は私がやったことです:ここではruby​​ on rails特定の列名の後に列を追加します。

rails generate migration add_reaction_id_to_patient_allergies reaction_id: integer :after => 'patient_id' 

は私のマイグレーションファイルは次のようになります。

class AddReactionIdToPatientAllergies < ActiveRecord::Migration 
    def change 
    add_column :patient_allergies, :reaction_id, :string 
    add_column :patient_allergies, :integer, :string 
    add_column :patient_allergies, :, :after 
    add_column :patient_allergies, :=, :string 
    end 
end 

私はコマンドがうまくいったと思ういけません。上記のファイルに '='があります。私はそこにすべきだとは思わない。誰かが私が何かを見逃したら教えてもらえますか?

もしそうなら、私はどのように上記を元に戻すことができますか?

答えて

38

実際にこの移行を許可したかどうかわからないので、ロールバックする必要はありません。ただ、下の3つのadd_column Sを削除し、

add_column :patient_allergies, :reaction_id, :integer, after: :patient_id 

でトップ1を交換し、移行し問題ないはずです。

rails generate migration add_reaction_id_to_patient_allergies reaction_id:integer 

スペースinteger前には、発電機は、それが新しい列だったと思う製:今後の参考のために、ここでのようにあなたが入力したコマンドがどうあるべきかです。残念ながら、Rubyの構文(a => b)をコマンドラインで使用することはできません。

+1

@michaelこの素晴らしい答えにもう一つ追加するだけで、成功しているが望ましくない移行を元に戻すには、rake db:rollbackを実行することができます。これは、最新の移行を元に戻します。それを繰り返すことでさらに後ろに歩むことができます。私はしばしば、デフォルト値やカラムの順番を設定するなどの小さな微調整を元に戻すことに気づきます。 – Polsonby

+3

':after'オプションは[API documentation](http://api.rubyonrails.org/classes)には含まれていません。 /ActiveRecord/Migration.html)、少なくともRails 4.2.3では試行後に見つかった:移行はうまくいったが、注文は適用されなかった。 – nandinga

+0

@nandinga最新のRailsで[ColumnDefinition](https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb#L13)クラスがサポートされているようです'after'オプションもありますが、私はRailsの最後のリリースでこれをテストしていません。 – piersadrian

関連する問題