2009-10-27 75 views

回答

18

有沒有神奇的方法,讓你創建一個觸發器,而無需編寫任何SQL。
但是你可以在任何遷移中執行原始的sql。

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

然後,您只需要適當地編寫觸發器或根據遷移進行更新。

編輯:我剛剛發現rails_on_pg,它提供了一些幫助遷移。
它不適用於PgSQL以外的任何其他數據庫服務器。但是,如果你正在編寫一些MySQL觸發助手,它可能是一個很好的主角。

+0

感謝您的資源,我並不知道它確實存在:) – 2009-10-28 10:29:45

+0

最好現在刪除對'rails_on_pg'的引用:)它是6年前的最新更新:) – bbozo 2016-01-11 17:13:02

9

有一個名爲hairtrigger的寶石,使它更容易和更便攜(mysql/sqlite/postgres)。它可以讓你在你的遷移中以db-agnostic的方式創建觸發器,或者甚至更好的是你可以在你的模型中聲明它們,然後運行rake db:generate_trigger_migration來爲你做。

+0

此gem已過時 - 支持Rails 2.3 - Rails 3.0.x.但想法很好。 – 2012-09-04 18:39:57

+5

該寶石已更新,以支持最新版本的導軌 – 2012-12-04 07:32:27

+0

喬恩你的寶石是太棒了。你知道任何生成pg索引嗎? – zabumba 2013-03-28 21:55:45

0

認爲這可能幫助別人......

如果我們把自定義的SQL的開發環境,它可能無法正常工作,如果我們使用sqlite3的,我們的遷移命令將失敗的源碼:

rake db:migrate 

我發現在db/scripts下的單獨文件中創建觸發器sql更有用,並在mysql cli中執行它們。這樣我可以在觸發器更改時根據需要重新運行它們。