2016-04-04 11 views
0

Ich baue einen SMS-Dienst, wo viele Nachrichten an einen einzelnen Benutzer gebunden sind. Ich möchte, dass Nachrichten über ihre from_number an die Benutzertabelle indiziert werden. Unten ist was ich getan habe, aber ich bekomme immer einen Methodenfehler.Nicht definierte Methode `gehört_zu 'für # <ActiveRecord :: Migration: Fehler

Ich habe die folgenden zwei Modelle definiert:

1) message.rb

class Message < ActiveRecord::Base 
    belongs_to :user 
end 

2) User.rb

class User < ActiveRecord::Base 
    has_many :messages 
end 

Das folgende ist die Migrationsdatei Ich versuche über Rake zu laufen db: migrate:

class UsersMessages < ActiveRecord::Migration 

    def change 
    create_table :users do |t| 
     t.string :user_name 
     t.string :from_number 
     t.timestamps null: false 
    end 

    create_table :messages do |t| 
     t.belongs_to :user, index: true 
     t.string :message_body 
     t.string :from_number 
     t.timestamps null: false 
    end 

    add_index :users, :from_number, :unique => true 
    end 
end 

Ich halte die folgende Fehlermeldung erhalten:

-- belongs_to(:user) 
-- belongs_to(:user) 
rake aborted! 
NoMethodError: undefined method `belongs_to' for #<ActiveRecord::Migration:0x007ff453826f50> 

ich die has_many und belongs_to Verbände im Modell zu definieren, sondern gemäß Ziffer 2.1 hier: http://guides.rubyonrails.org/association_basics.html

ich fügen Sie den „t.belongs_to: Kunde, Index : true "Linie zur Migrationsdatei.

Vielen Dank für Ihre Hilfe !!

+1

Welche Version von Schienen verwenden Sie? Bitte führen Sie 'rails -v' aus und aktualisieren Sie Ihre Antwort. 'gehört_zu' in Migrationen wurde in den späteren Versionen von Rails hinzugefügt, so dass Sie möglicherweise Rails 3 ausführen. –

+0

' t.belongs_to: customer, index: true' why ': customer'? – 7urkm3n

+0

Welche Version von Rails benutzt du @philip-cortes nur neugierig? –

Antwort

0

Versuchen t.references :user, index: true in der Migration mit ..

+0

'gehört_to' ist nur ein Alias ​​von' references', also würde das OP einen ähnlichen Fehler bekommen. https://github.com/rails/rails/blob/88aa2efd692619e87eee88dfc48d608bea9bcdb4/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb#L421 –

0

Sie fehlen user_id in Nachrichten-Tabelle.

Führen Sie rake db:drop dann aus Nachrichtenmigration diese Zeile entfernen.

t.belongs_to :user, index: true

Run in der Befehlszeile folgendermaßen aus:

rails g migration add_user_id_to_messages user_id:interger 

und

rake db:migrate 
+0

Dies beantwortet die OP-Frage nicht. Das 'gehört' in die Migration und rails verwendet das um die user_id für dich zu erstellen. –

+0

Ich fürchte, Leo hat Recht. –

+0

@PhilipCortes nur zum Spaß, können Sie kommentieren "gehört_zu: Benutzer' Linie und Server neu starten, sehen, immer noch das gleiche Problem. – 7urkm3n

0

die belongs_to Syntax für Migrationen in Rails hinzugefügt 4. Ist es möglich, eine frühere verwenden Ausführung?

In jedem Fall können Sie einfach die Spalte und Index selbst hinzufügen:

t.integer :user_id, index: true

Verwandte Themen