Я сделал две модели: пользователь и игра. Мне нужно, чтобы каждая игра имела хоста и гостя, и они оба - просто пользователи.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>
'game.host.name' не работает .... объясните? Сообщение об ошибке ? –
Я добавил сообщение об ошибке. –
Ваш код выглядит отлично. Попробуйте перезагрузить сервер. – Pavan