2015-09-20 5 views
1

Я сделал две модели: пользователь и игра. Мне нужно, чтобы каждая игра имела хоста и гостя, и они оба - просто пользователи.Belongs_to на нескольких одинаковых моделях. Почему «магия» не работает?

class Game < ActiveRecord::Base 
    belongs_to :guest, class_name: 'User' 
    belongs_to :host, class_name: 'User' 
end 

и

class User < ActiveRecord::Base 
    has_many :hosted_games, :class_name => 'Game', :foreign_key => 'host_id' 
    has_many :guested_games, :class_name => 'Game', :foreign_key => 'guest_id' 
end 

и миграции для игры

class CreateGames < ActiveRecord::Migration 
    def change 
    create_table :games do |t| 
     t.references :host, index: true, foreign_key: true 
     t.references :guest, index: true, foreign_key: true 

     t.timestamps null: false 
    end 
    end 
end 

Мой вопрос, почему на мой взгляд

game.host.name 

не работает, и я должен использовать

User.find(game.host_id).name 

вместо этого?

Но когда я создаю твит и зомби, где Tweet принадлежит_о: зомби, зомби has_many: твиты, а затем магические tweet.zombie.name работает?

EDIT: Сообщение об ошибке

*uninitialized constant Game::Host* 

в строке: <% = game.host.name%>

<% @games.each do |game| %> 
    <tr> 
    <td><%= game.host.name %></td> 
    <td><%= User.find(game.guest_id).name %></td> 
    <td><%= link_to 'Show', game %></td> 
    <td><%= link_to 'Edit', edit_game_path(game) %></td> 
+4

'game.host.name' не работает .... объясните? Сообщение об ошибке ? –

+0

Я добавил сообщение об ошибке. –

+1

Ваш код выглядит отлично. Попробуйте перезагрузить сервер. – Pavan

ответ

0

Вероятно, опечатка где-то ... ошибка предположить, вы пытаетесь получить доступ к game.Host вместо game.host (остерегайтесь использования заглавных букв)

В противном случае это может быть confilct в именах методов ... вы переопределили метод host в своем классе игры?

+0

Это просто новый проект с игрой и пользователем с эшафота. game.guest.name тоже не работает («uninitialized constant Game :: Guest»). Я ничего не вводил вручную и не имел методов. –

1

Я не уверен, что должен написать это в ответном сообщении, но я решил, что проблема, я думаю.

Я сделал

rake db:reset 

и не дб: мигрируют после этого, как ранее.

Так что, похоже, мой код хорош. Я думаю, проблема заключалась в том, что я возился с git и базой данных. Я не уверен, но я хочу сэкономить ваше время, пытаясь решить мою, вероятно, проблему.