2016-05-25 58 views
6

Sto usando Rails 4.2.3 e un database PostGres. Voglio scrivere una migrazione per aggiornare uno dei miei chiavi esterne di avere un vincolo cascata su-delete, così ho creatoCome si crea una migrazione Rails che aggiorna una chiave esterna con un vincolo a cascata on-delete?

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 

ma quando ho eseguito la migrazione ottengo l'errore sotto ...

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

Come dovrei scrivere la mia migrazione per aggiornare la chiave esterna?

risposta

6

È necessario cambiare questa linea,

add_foreign_key :my_object_times, :my_objects, on_delete: cascade 

Con questo:

add_foreign_key :my_object_times, :my_objects, on_delete: :cascade 

La semplice differenza è che cascade dovrebbe essere un simbolo (:cascade) o una stringa ('cascade').

Spero che questo aiuti.

Cordiali saluti,