2016-05-25 18 views
6

Tôi đang sử dụng Rails 4.2.3 và cơ sở dữ liệu PostGres. Tôi muốn viết một di chuyển để cập nhật một trong những chìa khóa nước ngoài của tôi để có một thác chế on-xóa, vì vậy tôi tạoLàm cách nào để tạo di chuyển Rails cập nhật khóa ngoại với ràng buộc xếp tầng đang xóa?

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 

nhưng khi tôi chạy di cư tôi nhận được báo lỗi dưới đây ...

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

Tôi phải viết di chuyển của mình để cập nhật khóa ngoại như thế nào?

Trả lời

6

Bạn cần thay đổi dòng này,

add_foreign_key :my_object_times, :my_objects, on_delete: cascade 

Với một cú này:

add_foreign_key :my_object_times, :my_objects, on_delete: :cascade 

Sự khác biệt đơn giản là cascade phải là một biểu tượng (:cascade) hoặc một chuỗi ('cascade').

Hy vọng điều này sẽ hữu ích.

Trân trọng,

Các vấn đề liên quan