2016-05-25 54 views
6

Używam Rails 4.2.3 i bazy danych PostGres. Chcę napisać migracji do aktualizacji jednego z moich kluczy obcych mieć kaskadowy ograniczenie on-delete, więc stworzyłemJak utworzyć migrację Rails, która aktualizuje klucz obcy przy użyciu ograniczenia kaskady na usuwanie?

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 

ale gdy uruchomię migrację otrzymuję poniżej błąd ...

$ 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' 

Jak mam napisać moją migrację, aby zaktualizować klucz obcy?

Odpowiedz

6

trzeba zmienić tę linię,

add_foreign_key :my_object_times, :my_objects, on_delete: cascade 

Z tego:

add_foreign_key :my_object_times, :my_objects, on_delete: :cascade 

Prosta różnica polega na tym, że cascade powinien być symbolem (:cascade) lub ciąg ('cascade').

Mam nadzieję, że to pomoże.

Pozdrawiam,