2016-07-21 13 views
0

Ich bin neu auf Schienen und nach einem Tutorial, wo wir einige Einträge erstellt haben. Zur Zeit, als ich den Server ausführen es sagt mirDoppelte Spaltenname in Schienen

Migrations are pending. To resolve this issue, run: bin/rake db:migrate RAILS_ENV=development 

Dann bemerkte ich, nachdem ich einige SO Beiträge zu sehen, ich Dinge tun sollten, wie laufen

rake db:migrate 

Dann erkannte ich, wenn ich es tat, dass ich ein paar bekam von Linien und eine, die diese hatte

ActiveRecord::StatementInvalid: SQLite3::SQLException: duplicate column name: description: ALTER TABLE "articles" ADD "description" text 

Welche ich vermute, das Problem kommt von. Nun bin ich kein Experte in Schienen, aber wie kann ich feststellen, wo diese doppelte Spalte aus ist, wenn ich

rails console- > Article.all 

bekomme ich

<ActiveRecord::Relation [#<Article id: 1, title: "This is my first article", 

description: "This is the description", created_at: "2016-07-20 00:03:42", 

updated_at: "2016-07-20 00:03:42">, #<Article id: 2, title: "This is an endited 

title", description: "This is my second description", created_at: "2016-07-20 

00:05:39", updated_at: "2016-07-20 00:40:54">] 

Was ich gestern erstellt. Aber wo ist dieses doppelte Beschreibungsfeld? Wo soll ich hinschauen?

Meine beiden Migrationsdateien aussehen wie dies durch die Art und Weise

class CreateArticles < ActiveRecord::Migration 
    def change 
    create_table :articles do |t| 
     t.string :title 
     t.text :description 
     t.timestamps null: false 
    end 
    end 
end 

Ein weiteres

class AddDescriptionToArticles < ActiveRecord::Migration 
     def change 
     add_column :articles, :description, :text 
     add_column :articles, :created_at, :datetime 
     add_column :articles, :updated_at, :datetime 
     end 
    end 

Mein Schema

ActiveRecord::Schema.define(version: 20160715020218) do 

    create_table "articles", force: :cascade do |t| 
    t.string "title" 
    t.text  "description" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

end 

Antwort

1

in der zweiten Migrations add_column :articles, :description, :text die Linie herausnehmen. Sie bereits eine description Spalte, wenn Sie die articles Tabelle in der ersten Migration erstellt, mit der Linie t.text :description:

create_table :articles do |t| 
    t.string :title 
    t.text :description 
    t.timestamps null: false 
end 

, dass die doppelte Spalten Rails ist bezieht sich auf den in den Fehler. Das nächste Mal, bevor Sie Migrationen ausführen können Sie schema.rb Datei überprüfen, um zu sehen, was Ihre Datenbank-Tabellen aussehen

dies das erste Mal verschossen, aber Sie auch Ihre Zeitstempel Spalten duplizieren, created_at und updated_at So ist die zweite Migration nicht erforderlich ist

+0

Ich habe das Schema im ursprünglichen Beitrag hinzugefügt. Es gibt mir immer noch einen Fehler, und wenn ich Rake db: migrieren, sagt es mir, ich habe eine doppelte Spalte woanders auch –

+0

editierte Antwort. Du verdoppelst auch deine Zeitstempelspalten, wenn dein Schema sie bereits hat – Ren

+0

So lösche ich alles in def Änderung? Seltsam, der Ausbilder schrieb DEFINITIV alles in der letzten Vorlesung. Und sein Code funktioniert gut –

1

Der Grund für die Fehlermeldung, dass doppelte Spalten vorhanden sind, liegt darin, dass Sie einfach versuchen, Spalten hinzuzufügen, die bereits in Ihrem Modell vorhanden sind.

durch Ihre erste Migrationsdatei ausführen lässt:

class CreateArticles < ActiveRecord::Migration 
    def change 
    create_table :articles do |t| 
     t.string :title 
     t.text :description 
     t.timestamps null: false 
    end 
    end 
end 

Im create_table Block Sie die folgenden Zeilen haben: t.string :title < - das schafft eine Titelspalte vom Typ String. t.text :description < - dies erstellt eine Beschreibungsspalte vom Typ text. t.timestamps, null: false < - dies erstellt zwei Spalten: created_at und updated_at beide vom Typ datetime mit dem not_null Flag auf ihnen.

Jetzt in Ihrem zweiten Migrations-Datei, die Sie versuchen, drei Spalten hinzuzufügen:

add_column :articles, :description, :text 
add_column :articles, :created_at, :datetime 
add_column :articles, :updated_at, :datetime 

Aber wie wir oben sie bereits erstellt haben erklärt, und deshalb sind Duplikate, die gemacht werden können. Die beste Möglichkeit, Ihr Problem zu lösen, wäre also, diese zweite Migrationsdatei zu löschen, in der Sie add_column verwenden und alles sollte in Ordnung sein.

+0

Ja, ich erinnere mich, mein Lehrer lehrte uns nur, wie man eine neue Migrationsdatei erstellt, wenn wir vergessen haben, etwas wie die Beschreibung hinzuzufügen. Ich dachte, wir müssten das einbinden, aber da ich die Beschreibung bereits in die erste Migrationsdatei aufgenommen habe, geht es mir gut. Ich war nur verwirrt. Schienen sind sicher verwirrend, haha! Danke –

+0

Ahh, ich verstehe. Gut, dass alles jetzt gelöst ist! Viel Spaß mit dem Rest von Ruby on Rails lernen;) –