Не могу пойти назад ассоциация - PullRequest
0 голосов
/ 01 февраля 2012

Я новичок в рубине и рельсах, так что будьте осторожны.

В настоящее время у меня есть 3 модели (игра, матч, игрок, пользователь)

game.rb

has_many :matches

match.rb

belongs_to :game
has_many :players

player.rb

belongs_to :match
belongs_to :user

Теперь я хочу заполнить эти ассоциации в модели игрока.

что я в основном делаю:

players_controller.rb

def create
@game = Game.find(params[:game_id])
@match = @game.matches.find(params[:match_id])
@player = @match.players.create(params[:player])
@player.user = User.find(current_user.id)
end

после этого я хочу позвонить в представлении

<%= @player.user.email %>

тогда возникает эта ошибка:

undefined method `email' for nil:NilClass

так что мой вопрос в том, что я делаю неправильно, когда я иду назад в ассоциациях? это должно быть как-то возможно

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Вам необходимо позвонить @player.save после назначения на @player.user.Ваши ассоциации не «задом наперед», вам просто нужно сохранить запись после обновления любого из ее атрибутов, чтобы зафиксировать изменения в базе данных.

В настоящее время ваш метод create создает нового игрока через @match.players.create(...).Это последний раз, когда ваш player объект записывается в базу данных.Следующая строка, которая назначает пользователя для ассоциации user, никогда не сохраняется.

И примечание по стилю: если current_player является объектом игрока, вы должны просто назначить его непосредственно на @player.user вместо поиска объекта, который у вас уже есть.Последняя строка:

@player.user = User.find(current_user.id)

Должно быть написано:

@player.user = current_user
0 голосов
/ 01 февраля 2012

Вы пропустили @player.save после назначения атрибута пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...