RAILS将触发器添加到迁移中

时间:2016-09-06 12:05:47

标签: 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
    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;;

在迁移中,我将此代码写入执行“...”但我有很多语法错误。 谢谢:))

1 个答案:

答案 0 :(得分:1)

好的,你只需要做

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

这是因为rails可以执行指令&#34; DELIMITER&#34;因为它是一种mysql语法。