2009-10-27 117 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中执行它们。这样我可以在触发器更改时根据需要重新运行它们。