2009-10-27 3 views

ответ

18

Нет никакого волшебного метода, позволяющего создавать триггер без написания SQL.
Но вы можете выполнить raw sql внутри любой миграции.

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

Тогда вам просто нужно правильно записать триггер или обновить его в зависимости от миграции.

Редактировать: Я только что нашел rails_on_pg, в котором содержатся некоторые помощники для миграции.
Он не работает ни с каким другим сервером базы данных, кроме PgSQL. Но это может быть хорошим моментом, если вы собираетесь написать помощник по запуску MySQL.

+0

Спасибо, за ваш ресурс, я не знал, что он существует :) –

+0

Лучше удалите ссылку на 'rails_on_pg' сейчас :) это было последние обновления 6 лет назад :) – bbozo

9

есть жемчужина под названием hairtrigger, что делает это немного проще и более портативным (mysql/sqlite/postgres). он позволяет создавать триггеры в ваших миграциях с помощью db-agnostic, или даже лучше вы можете объявить их в своих моделях, а затем запустить rake db: generate_trigger_migration, чтобы сделать это за вас.

+0

Этот жемчуг устарел - поддерживает Rails 2.3 - Rails 3.0.x. Но идея велика. –

+5

драгоценный камень был обновлен для поддержки последних версий рельсов. –

+0

Jon your gem является фантастическим. Вы знаете что-нибудь, чтобы генерировать pg-индексы? – zabumba

0

Думал, что это может помочь кому-то ...

Если мы пользовательские SQL не может работать на среде разработки, если мы используем SQLite3 и нашу команду перенастройки потерпит неудачу на SQLite:

rake db:migrate 

Я счел более полезным создать триггер sql в отдельном файле под db/scripts и выполнить их в mysql cli. Таким образом, я мог бы повторно запускать их в соответствии с потребностью при смене триггера.

Смежные вопросы