Как создать триггеры MySQL, используя миграции в Rails? - PullRequest
17 голосов
/ 27 октября 2009

Есть ли способ создания триггеров mysql с использованием миграций Activerecord? Кто-нибудь работал над этим, поделитесь своим опытом. Спасибо

Ответы [ 3 ]

23 голосов
/ 27 октября 2009

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

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

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

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

11 голосов
/ 22 марта 2011

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

0 голосов
/ 04 марта 2016

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

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

rake db:migrate

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

...