2008-11-26 12 views

Respuesta

2

AFAIK, no hay ningún soporte incorporado para eso, pero hay several plugins que lo ayudan con eso. También puede agregarlos manualmente a sus archivos de migración, solo use el método de ejecución para eso, p. (Muestra de rieles API):

class MakeJoinUnique < ActiveRecord::Migration 
    def self.up 
     execute "ALTER TABLE `pages_linked_pages` ADD UNIQUE `page_id_linked_page_id` (`page_id`,`linked_page_id`)" 
    end 

    def self.down 
     execute "ALTER TABLE `pages_linked_pages` DROP INDEX `page_id_linked_page_id`" 
    end 
    end 
+6

Viejo poste, pero en caso de que alguien ve esto: un índice único no es equivalente a una restricción de clave externa, por lo que creo que este código no responde a la pregunta de la OP. – dsetton

14

He aquí una solución basada en la joya que incluye soporte para agregar y quitar restricciones de clave externa, no falla con SQLite, y funciona correctamente con archivos schema.rb:

http://github.com/matthuhiggins/foreigner

+0

FYI, 'foreign' no genera claves externas en' schema.rb' cuando usa SQLite, porque SQLite no admite claves externas. – ashes999

4

Esta es una actualización de la gema matthuhiggins-extranjero: http://github.com/sparkfly/foreigner

Características:

  • cobertura rspec, probado contra PostgreSQL 8.3.9 y MySQL 5.0.90
  • soporte a la migración
  • apoyo schema.rb

versiones futuras incluirán restricciones CHECK para PostgreSQL, que se necesita para implementar múltiples herencia de tabla.

+0

Gracias. la gema extranjera no funciona bien con el método de cambio, especialmente si la tabla no se ha creado antes. Esto funciona muy bien – Sean

+0

Bienvenida. Avísame (a través de github) si encuentras algún error. –

0

¿Sería suficiente con agregar lo siguiente, por ejemplo con los modelos Products y User?

add_index :products, :user_id

+1

Agregar un índice sin duda ayudará con el rendimiento de la consulta, pero no hará que una base de datos haga cumplir las restricciones de clave externa. –

Cuestiones relacionadas