web-dev-qa-db-ja.com

削除時のカスケード制約で外部キーを更新するRails移行を作成するにはどうすればよいですか?

Rails 4.2.3とPostgreSQLデータベースを使用しています。外部キーの1つを更新して、削除時のカスケード制約を設定するための移行を作成したいので、次を作成しました。

class UpdateForeignKeyAddOnDeleteConstraint < ActiveRecord::Migration
  def change
    remove_foreign_key :my_object_times, :my_objects
    add_foreign_key :my_object_times, :my_objects, on_delete: cascade
  end
end

しかし、移行を実行すると、以下のエラーが発生します。

$ rake db:migrate
== 20160525203028 UpdateForeignKeyAddOnDeleteConstraint: migrating ============
-- remove_foreign_key(:my_object_times, :my_objects)
   -> 0.0454s
-- cascade()
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

undefined local variable or method `cascade' for #<UpdateForeignKeyAddOnDeleteConstraint:0x007f82f2c71998>
/Users/davea/.rvm/gems/Ruby-2.3.0@global/gems/activerecord-4.2.5.1/lib/active_record/migration.rb:664:in `block in method_missing'
/Users/davea/.rvm/gems/Ruby-2.3.0@global/gems/activerecord-4.2.5.1/lib/active_record/migration.rb:634:in `block in say_with_time'
/Users/davea/.rvm/gems/Ruby-2.3.0@global/gems/activerecord-4.2.5.1/lib/active_record/migration.rb:634:in `say_with_time'
/Users/davea/.rvm/gems/Ruby-2.3.0@global/gems/activerecord-4.2.5.1/lib/active_record/migration.rb:654:in `method_missing'

外部キーを更新するための移行をどのように作成する必要がありますか?

14
Dave

この行を変更する必要があります、

add_foreign_key :my_object_times, :my_objects, on_delete: cascade

これで:

add_foreign_key :my_object_times, :my_objects, on_delete: :cascade

単純な違いは、cascadeはシンボル(:cascade)または文字列('cascade')。

お役に立てれば。

よろしく、

19
ekampp