2016-05-25 40 views
6

Ich benutze Rails 4.2.3 und eine PostGres-Datenbank. Ich möchte eine Migration schreiben eine meiner Fremdschlüssel zu aktualisieren, eine On-DELETE CASCADE-Einschränkung zu haben, so habe ichWie erstelle ich eine Rails-Migration, die einen Fremdschlüssel mit einer On-Delete-Kaskadenbedingung aktualisiert?

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 

aber wenn ich die Migration laufen bekomme ich die folgenden Fehler ...

$ 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/[email protected]/gems/activerecord-4.2.5.1/lib/active_record/migration.rb:664:in `block in method_missing' 
/Users/davea/.rvm/gems/[email protected]/gems/activerecord-4.2.5.1/lib/active_record/migration.rb:634:in `block in say_with_time' 
/Users/davea/.rvm/gems/[email protected]/gems/activerecord-4.2.5.1/lib/active_record/migration.rb:634:in `say_with_time' 
/Users/davea/.rvm/gems/[email protected]/gems/activerecord-4.2.5.1/lib/active_record/migration.rb:654:in `method_missing' 

Wie soll ich meine Migration schreiben, um den Fremdschlüssel zu aktualisieren?

Antwort

6

Sie müssen diese Zeile ändern

add_foreign_key :my_object_times, :my_objects, on_delete: cascade 

Mit dieser:

add_foreign_key :my_object_times, :my_objects, on_delete: :cascade 

Der einfache Unterschied ist, dass cascade ein Symbol sein sollte (:cascade) oder eine Zeichenfolge ('cascade').

Hoffe, das hilft.

Grüße,