2013-11-02 2 views
1

Я следующие Миграции и модели:Rails - has_many отношение вызывает NoMethodError

class CreatePlatforms < ActiveRecord::Migration 
    def change 
    create_table :platforms do |t| 

     t.integer :user_id 
     t.string :name 
     t.string :platform_id 
     t.timestamps 
    end 
    end 
end 

class CreateUsers < ActiveRecord::Migration 
    def change 
    create_table :users do |t| 

     t.string :email 
     t.string :first_name 
     t.string :last_name 
     t.string :gender 
     t.date :birthday 
     t.timestamps 
    end 
    end 
end 

class Platform < ActiveRecord::Base 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    attr_accessible :email, :first_name, :last_name, :gender, :birthday 
    has_many :platforms 
end 

С этим определением я могу создавать пользователей и платформы:

user = User.new 
platform1 = Platform.new 
platform2 = Platform.new 

И даже я могу связать пользователей платформы :

platform1.user = user 

Но когда я пытаюсь связать платформы с пользователями или получать платформы от пользователей он выходит из строя:

user.platforms << user or user.platforms 
NoMethodError: undefined method `platforms' for #<User:0x007f8cfd47a770> 
+0

Вы уверены, что вы перезагрузили среду и пользовательскую переменную? Например, если у вас есть экземпляр пользователя в консоли Rails, выполните миграцию, обновите модель пользователя и затем перезагрузите консоль, она все равно не будет работать, потому что экземпляр пользователя был сделан из более старой версии класса, и вам нужно создать новую (снова выберите его из БД). Если это происходит в вашей серверной среде Dev, поставьте больше контекста/подробностей, пожалуйста. –

+0

Перезагрузка консоли также является очень возможным решением! –

+0

Я сделал это после перенастройки базы данных в первый раз. Но на всякий случай я перезагрузил консоль, и проблема не устранена. Существует не так много контекста, это пустой проект rails (rails 4.0.0 ruby ​​2.0.0) – user1573607

ответ

3

Как оказалось, проблема в том, что поле базы данных platform_id. Это испортит рельсы. Просто удалите его, и он сработает.

+0

Это странно, потому что я перезагрузил консоль и проблема сохраняется. Как вы это сделали? Копировать/вставить мой код? – user1573607

+0

Вы могли бы успешно сохранить как пользователя, так и платформы? –

+0

и простой 'reload!' Не будет делать, вам нужно будет выйти, а затем снова открыть его –

Смежные вопросы