Mysql RAILS将触发器添加到迁移中

Mysql RAILS将触发器添加到迁移中,mysql,ruby-on-rails,ruby,triggers,migration,Mysql,Ruby On Rails,Ruby,Triggers,Migration,我在rails应用程序中使用mysql,我想创建一个触发器,但需要迁移。 这是我的sql代码 DELIMITER ;; CREATE TRIGGER check_validation_participant BEFORE UPDATE ON participants FOR EACH ROW BEGIN DECLARE valide INTEGER; IF NEW.current_state = 1 THEN SELECT COUNT(*) INTO valide FRO

我在rails应用程序中使用mysql,我想创建一个触发器,但需要迁移。 这是我的sql代码

DELIMITER ;;
CREATE TRIGGER check_validation_participant
BEFORE UPDATE ON participants
FOR EACH ROW
BEGIN

DECLARE valide INTEGER;


IF NEW.current_state = 1 THEN

    SELECT COUNT(*) INTO valide
    FROM participants
    WHERE user_id = NEW.user_id
    AND current_state = 1;


    IF valide > 0 THEN
        SIGNAL SQLSTATE '45000'
            SET MESSAGE_TEXT = 'Un événement est déjà validé pour cet utilisateur';
    END IF;
END IF;
END;;
在迁移过程中,我将这段代码写入execute“…”中,但我有很多语法错误。
谢谢:)

好的,你只要做

execute <<-SQL

CREATE TRIGGER check_validation_participant
BEFORE UPDATE ON participants
FOR EACH ROW
BEGIN

  DECLARE valide INTEGER;

  IF NEW.current_state = 1 THEN
    SELECT COUNT(*) INTO valide
    FROM participants
    WHERE user_id = NEW.user_id
    AND current_state = 1;

    IF valide > 0 THEN
      SIGNAL SQLSTATE '45000'
          SET MESSAGE_TEXT = 'Un événement est déjà validé pour cet utilisateur';
    END IF;
  END IF;
END;

SQL

execute请解释您遇到的错误。