2008-11-26 20 views

Antwort

2

AFAIK, es gibt keine integrierte Unterstützung dafür, aber es gibt several plugins, die Ihnen dabei helfen. Sie können sie auch manuell zu Ihren Migrationsdateien hinzufügen, verwenden Sie dazu einfach die execute-Methode, z. (Probe von Rails 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

Alte Post, aber falls jemand sieht folgendermaßen aus: ein eindeutiger Index zu einem Fremdschlüssel nicht gleichwertig ist, so glaube ich, diesen Code nicht die Frage des OP beantwortet. – dsetton

14

Hier ist ein Juwel-basierte Lösung, die Unterstützung für das Hinzufügen und Entfernen von Fremdschlüssel-Constraints enthält, scheitert nicht mit SQLite und funktioniert einwandfrei mit schema.rb Dateien:

http://github.com/matthuhiggins/foreigner

+0

FYI, 'Ausländer' erzeugt keine Fremdschlüssel in' schema.rb', wenn SQLite verwendet wird, da SQLite keine Fremdschlüssel unterstützt. – ashes999

4

Dies ist ein Update für die matthuhiggins-Ausländer gem: http://github.com/sparkfly/foreigner

Eigenschaften:

  • rspec Abdeckung, getestet gegen PostgreSQL 8.3.9 und MySQL 5.0.90
  • Migrationsunterstützung
  • schema.rb Unterstützung

Zukünftige Versionen werden CHECK-Einschränkungen für PostgreSQL enthalten, die mehr zu implementieren benötigt wird -Tabelle Vererbung.

+0

Danke. das Juwel des Ausländers funktioniert nicht gut mit der Änderungsmethode, insbesondere wenn die Tabelle noch nicht erstellt wurde. Das funktioniert super – Sean

+0

Ihre begrüßt. Lass mich wissen (über GitHub), wenn Sie irgendwelche Fehler finden. –

0

Wäre es ausreichend mit dem Hinzufügen der folgenden, zum Beispiel mit Products und User Modelle?

add_index :products, :user_id

+1

Das Hinzufügen eines Indexes wird sicherlich bei der Abfrageleistung hilfreich sein, aber es wird nicht dazu führen, dass eine Datenbank Fremdschlüsseleinschränkungen erzwingt. –

Verwandte Themen