2016-12-11 6 views
1

Ich folge dem Buch: "Rails, Angular, Postgres und Bootstrap". Irgendwann schrieb der Autor eine neue Migration, mit diesem Code:Rails, Uninitialized Konstante nach Rake db: migrieren

class AddAddresses < ActiveRecord::Migration 
    def change 
    create_table :states do |t| 
     t.string :code, size: 2, null: false 
     t.string :name,   null: false 
    end 

    create_table :addresses do |t| 
     t.string  :street,     null: false 
     t.string  :city,      null: false 
     t.references :state,      null: false 
     t.string  :zipcode,     null: false 
    end 

    create_table :customers_billing_addresses do |t| 
     t.references :customer, null: false 
     t.references :address, null: false 
    end 

    create_table :customers_shipping_addresses do |t| 
     t.references :customer, null: false 
     t.references :address, null: false 
     t.boolean :primary, null: false, default: false 
    end 
    end 
end 

Hier ist, was ich getan habe:

  1. rails g migration add-addresses

  2. kopiert und eingefügt den Code oben in der generierten Migrationsdatei

  3. rake db:migrate

Dies geschieht:

== 20161211174928 AddAddresses: migrating ===================================== 
-- create_table(:states) 
    -> 0.0140s 
-- create_table(:addresses) 
    -> 0.0129s 
-- create_table(:customers_billing_addresses) 
    -> 0.0115s 
-- create_table(:customers_shipping_addresses) 
    -> 0.0142s 
== 20161211174928 AddAddresses: migrated (0.0529s) ============================ 
  1. rails c
  2. State.last verursacht dies:

    NameError: uninitialized constant State

  3. habe ich geprüft, ob 'Staat' war um:

    ActiveRecord::Base.connection.tables.map do |model| 
        model.capitalize.singularize.camelize 
    end 
    

führt zu:

["SchemaMigration", "ArInternalMetadatum", "User", "Customer", "State", "Address", "CustomersBillingAddress", "CustomersShippingAddress"] 

Da 'Staat' klar ist, ich bin ratlos, was das Problem ist. Irgendwelche Vorschläge?

PS: Ich habe bereits versucht, diese, aber das Problem bleibt:

rake db:drop:all 
rake db:create:all 
rake db:migrate 

Antwort

0

Haben Sie eine state.rb Datei unter app/models Verzeichnis? Ich nehme an, du tust es nicht. Beim Erstellen einer Tabelle wird die model (Klasse) nicht generiert, während beim Generieren des Modells mit rails g model die Migration für Sie erstellt wird.

Erstellen Sie eine Datei namens state.rb in app/models und fügen Sie der Datei den folgenden Inhalt hinzu.

class State < ActiveRecord::Base 
end 
+0

Aber warum in aller Welt ist der Autor des Buches das nicht zu sagen? Danke – Metaphysiker

+0

Ich habe keine Ahnung von diesem Buch. Bist du sicher, dass du alles im Buch befolgt hast? –

+0

Er referenziert tatsächlich eine frühere Seite in dem Buch, wo er dies getan hat: Rails g Modell Kunde first_name: string \ last_name: string \ E-Mail: string \ username: string. Aber war das wirklich zu viel, um es aufzuschreiben? Vielen Dank – Metaphysiker

0

Da Sie zeigen State.code und State.name nicht leer sein können, und sehr wahrscheinlich haben noch keine Daten in der Tabelle, Start durch einige Daten zu schaffen, das heißt:

state=State.create(code: 12, name: "New Jersey") 

Versuchen Sie, dass eine Datei state.rb in den Modellen Verzeichnis mit dem Namen machen. in es setzen:

classState < ActiveRecord::Base 
end 

und sehen, ob das funktioniert. Später können Sie die Verknüpfungen hinzufügen. Dies wird die Klasse initialisieren.

+0

irb (main): 006: 0> state = State.create (Code: 12, Name: "New Jersey") Nameerror: nicht initialisierte Konstante Staat – Metaphysiker

+0

Haben Sie ein Modell für staatliche erstellt? –

+0

Soweit ich weiß, sollte dies das Modell erstellen: create_table: states do | t | t.string: code, size: 2, null: false t.string: name, null: falsch end Ist das falsch? – Metaphysiker

Verwandte Themen