2009-10-27 17 views

Trả lời

18

Không có phương pháp kỳ diệu nào cho phép bạn tạo trình kích hoạt mà không cần viết bất kỳ SQL nào.
Nhưng bạn có thể thực thi sql thô bên trong bất kỳ di chuyển nào.

def self.up 
    execute <<-SQL 
     CREATE TRIGGER my_trigger ... 
    SQL 
end 

Sau đó, bạn chỉ cần viết một cách thích hợp trình kích hoạt hoặc cập nhật tùy thuộc vào quá trình di chuyển.

Chỉnh sửa: Tôi vừa tìm thấy rails_on_pg, cung cấp một số người trợ giúp để di chuyển.
Nó không hoạt động với bất kỳ máy chủ cơ sở dữ liệu nào khác hơn là PgSQL. Nhưng nó có thể là một hướng dẫn tốt nếu bạn đang viết một số trợ giúp kích hoạt MySQL.

+0

Cảm ơn, vì tài nguyên của bạn, tôi đã không biết rằng nó đã tồn tại :) –

+0

Tốt nhất loại bỏ tham chiếu đến 'rails_on_pg' bây giờ :) nó đã được cập nhật lần cuối 6 năm trước :) – bbozo

9

có một viên ngọc được gọi là hairtrigger giúp việc này dễ dàng hơn và dễ dàng hơn (mysql/sqlite/postgres). nó cho phép bạn tạo các trigger trong di trú của bạn theo cách db-agnostic, hoặc thậm chí tốt hơn bạn có thể khai báo chúng trong các mô hình của bạn và sau đó chạy rake db: generate_trigger_migration để làm điều đó cho bạn.

+0

Đá quý này đã lỗi thời - hỗ trợ Rails 2.3 - Rails 3.0.x. Nhưng ý tưởng là tuyệt vời. –

+5

đá quý đã được cập nhật để hỗ trợ các phiên bản mới nhất của đường ray –

+0

Jon đá quý của bạn là tuyệt vời. Bạn có biết gì để tạo chỉ mục pg không? – zabumba

0

Nghĩ rằng nó có thể giúp ai đó ...

Nếu chúng ta đặt tùy chỉnh SQL nó có thể không hoạt động trên môi trường phát triển, nếu chúng ta đang sử dụng SQLite3 và lệnh di cư của chúng ta sẽ thất bại trên sqlite:

rake db:migrate 

Tôi tìm thấy nó hữu ích hơn để tạo ra kích hoạt sql trong một tập tin riêng biệt dưới db/script và thực hiện chúng trong mysql cli. Bằng cách đó tôi có thể chạy lại chúng theo nhu cầu khi kích hoạt thay đổi.

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