2009-10-27 8 views

Respuesta

18

No hay un método mágico que le permita crear un disparador sin escribir ningún SQL.
Pero puede ejecutar sql sin procesar dentro de cualquier migración.

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

Luego solo tiene que escribir apropiadamente su activador o actualizarlo dependiendo de la migración.

Editar: Acabo de encontrar rails_on_pg, que proporciona algunos ayudantes para las migraciones.
No funciona con ningún otro servidor de base de datos que PgSQL. Pero puede ser una buena pista si está dispuesto a escribir algún ayudante desencadenante de MySQL.

+0

Gracias, por su recurso, no sabía que existía :) –

+0

Mejor eliminar la referencia a 'rails_on_pg' ahora :) fueron las últimas actualizaciones hace 6 años :) – bbozo

9

hay una gema llamada hairtrigger que hace esto un poco más fácil y portátil (mysql/sqlite/postgres). te permite crear desencadenantes en tus migraciones de forma independiente de DB, o incluso mejor puedes declararlos en tus modelos y luego ejecutar rake db: generate_trigger_migration para que lo haga por ti.

+0

Esta joya está desactualizada - es compatible con Rails 2.3 - Rails 3.0.x. Pero la idea es genial. –

+5

la gema se ha actualizado para admitir las últimas versiones de rieles –

+0

Jon su joya es fantástica. ¿Conoces alguno para generar índices pg? – zabumba

0

pensó que podría ayudar a alguien ...

Si ponemos SQL personalizado que puede no funcionar en el entorno de desarrollo, si estamos utilizando SQLite3 y nuestro comando migrate fallaría en sqlite:

rake db:migrate 

Me pareció más útil crear trigger sql en un archivo separado en db/scripts y ejecutarlos en mysql cli. De esa manera podría volver a ejecutarlos según la necesidad cuando el gatillo cambie.