2009-10-27 23 views

答えて

18

SQLを書き込まずにトリガーを作成できる魔法の方法はありません。
しかし、すべての移行でraw SQLを実行できます。

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

次に、適切なトリガーを作成するか、移行に応じて更新する必要があります。

を編集しました:私はちょうどrails_on_pgを見つけました。これは移行の助けになります。
PgSQL以外のデータベースサーバでは動作しません。しかし、いくつかのMySQLトリガーヘルパーを書くことができれば、それは良いリードになるかもしれません。

+0

ありがとう、あなたのリソースのために、私はそれが存在していたことを知らなかった:) –

+0

今すぐ 'rails_on_pg'への参照を削除してください:)最後の更新は6年前でした:) – bbozo

9

hairtriggerという名前の宝石があります。この宝石は、少し簡単で移植性の高いものです(mysql/sqlite/postgres)。 dbアグノスティックな方法でマイグレーションのトリガーを作成したり、モデルでそれらを宣言したり、rake db:generate_trigger_migrationを実行して実行することができます。

rake db:migrate 

:我々はsqliteのに失敗しSQLite3のと私たちのmigrateコマンドを使用している場合、それは、開発環境では動作しない場合がありますカスタムSQLを置く場合

+0

この宝石は古いです - Rails 3.0.x.しかし、アイデアは素晴らしいです。 –

+5

最新のバージョンのレールをサポートするようにgemがアップデートされました –

+0

Jonあなたの宝石は素晴らしいです。 pgインデックスを生成することを知っていますか? – zabumba

0

...それが誰かを助けるかもしれないと思いましたdb/scriptsの下の別のファイルにtrigger sqlを作成し、mysql cliでそれらを実行すると便利です。そうすれば、トリガーが変わるときに必要に応じて再実行することができます。

関連する問題