簡體   English   中英

軌道將觸發器添加到遷移中

[英]RAILS Add trigger into a 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;;

在遷移中,我將此代碼編寫為執行“ ...”,但是我有很多語法錯誤。 謝謝 :)

好吧,你只需要做

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可以執行指令“ DELIMITER”,因為它是mysql語法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM