2017-05-13 5 views
0

私はPhoenixと遊んで、has_many関連付けを行っていました。私は通常on_delete: :delete_allを参照列のオプションとして使用します。しかし、私が心を変えて、後でnilify_allのためにそれを変更したいのであれば、マイグレーションの中でこれを行う方法はありますか?テーブルを作成するための参照列のon_deleteオプションを変更するための移行

移行:

def change do 
    create table(:messages) do 
     add :body, :text 
     add :sender_id, references(:users, on_delete: :delete_all) 

     timestamps() 
    end 
    create index(:messages, [:sender_id]) 

    end 

私はこのような何かを探しています:

def change do 
    change_options table(:messages), :user_id, on_delete: :nilify_all 
end 

私はmodifyalterを見てきましたが、私はon_deleteについては何も表示されませんでした。おそらく移行によっては不可能でしょうか?

答えて

1

あなたは新しいtypeに新しいon_deleteオプションを渡して、このためmodifyを使用することができますが、これをしようとしているときに、私はthis bugに遭遇し、の修正は、最初に手動でDROP制約です。 modifyは元に戻すことができないため、updownの両方のバージョンも指定する必要があります。

def up do 
    execute "ALTER TABLE posts DROP CONSTRAINT posts_user_id_fkey" 
    alter table(:posts) do 
    modify(:user_id, references(:users, on_delete: :delete_all)) 
    end 
end 

def down do 
    execute "ALTER TABLE posts DROP CONSTRAINT posts_user_id_fkey" 
    alter table(:posts) do 
    modify(:user_id, references(:users, on_delete: :nothing)) 
    end 
end 
+0

参考にしていただきありがとうございます。改訂に関する文書には参考文献は表示されませんでした。このようにすることはできないと考えていました。バグについてのリンクをありがとう、私はあなたが私に頭痛を奪うと思う! –

関連する問題