2016-08-04 35 views
3

(Rails ist Version 5.0.0, Rubin 2.3.0p0)Rails Migration mit add_foreign_key: ‚Spalte‚user_id‘in Fremdschlüssel verwiesen existiert nicht‘

Ich möchte eine Verbindung zwischen meiner Benutzer-Tabelle erstellen und Kartentisch. Ich habe belongs_to :user zum Karten-Modell hinzugefügt, und has_many :cards zum Benutzermodell und erstellt eine Migration mit:

class AddUserIdToCard < ActiveRecord::Migration[5.0] 
    def change 
    add_foreign_key :cards, :users, column: :user_id 
    end 
end 

Als ich rake db:migrate laufen, erhalte ich die Fehlermeldung:

ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column "user_id" referenced in foreign key constraint does not exist 
: ALTER TABLE "cards" ADD CONSTRAINT "fk_rails_8ef7749967" 
FOREIGN KEY ("user_id") 
    REFERENCES "users" ("id") 

Jetzt zunächst I Um dieses Problem zu umgehen, indem einfach add_column :cards, :user_id, :integer zur Migration hinzugefügt wurde, aber das scheint nicht wirklich sauber zu sein, und ich mache mir Sorgen um Probleme, die später auftauchen. Gibt es einen besseren Weg, dies zu erreichen?

+0

Bitte markieren Sie die Antwort, wenn Sie eine Minute Zeit haben, da es richtig ist – rmcsharry

Antwort

3

Sie legen einen Fremdschlüssel für die Tabelle cards mit der Spalte user_id fest. Aber Sie haben noch keine Referenz erstellt. Erstellen Sie eine Referenz, und fügen Sie einen Fremdschlüssel hinzu, um die referenzielle Integrität beizubehalten. Transfer abbrechen und ändern Sie Ihre Migration mit

1 class AddUserIdToCard < ActiveRecord::Migration[5.0] 
2  def change 
3  add_reference :cards, :users, index:true 
4  add_foreign_key :cards, :users 
5  end 
6 end 

Linie 3 wird in der cards Tabelle, ein Verweis auf id in der users Tabelle erstellen (durch eine user_id Spalte in cards erstellen).

Zeile 4 fügt auf Datenbankebene user_id eine Fremdschlüsseleinschränkung hinzu.

Weitere lesen Add a reference column migration in Rails 4

+0

Okay ... Ich habe eine Methode kein Fehler für 'add_references', aber ich versuchte,' add_reference' (Singular) stattdessen und dieser Fehler ging weg. aber ich habe noch was wie im Grunde die gleichen Fehler aussieht: 'Standarderror: ein Fehler aufgetreten ist, diese und alle später Migrationen abgesagt:' 'PG :: UndefinedColumn: ERROR: Spalte "user_id" in fremden verwiesen Schlüsseleinschränkung existiert nicht : ALTER TABLE "Karten" ADD CONSTRAINT "fk_rails_8ef7749967" FREMDSCHLÜSSEL ("user_id") REFERENZEN "Benutzer" ("id") ' –

+0

Es tut mir leid. Der Methodenname ist 'add_reference' und nicht' add_references'. Ich werde es aktualisieren. –