Подтвердить что ты не робот

Как создать триггеры mysql, используя миграции в Rails?

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

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

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

rake db:migrate

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