2016-09-06 88 views
0

我在rails應用程序中使用mysql,我想創建一個觸發器,但要進行遷移。 這是我的SQL代碼RAILS將觸發器添加到遷移中

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;; 

在遷移我寫這個代碼到執行「......」但我有很多語法錯誤。 謝謝:)

+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 

這是因爲軌道可以執行指令「分隔符」,因爲它是一個MySQL的語法。