Проблема цепочки рельсовых ассоциаций - PullRequest
1 голос
/ 07 мая 2011

Я в некоторой степени новичок в Rails и не могу избавиться от ощущения, что я упускаю из виду что-то глупое, но здесь все. Я создаю простую онлайн-игру, которая позволяет одному пользователю «бросать вызов» другому, и у меня есть следующие модели:

class User < ActiveRecord:Base
  has_one :challenge
end

class Challenge < ActiveRecord:Base
  belongs_to :user
  belongs_to :target, :class_name => 'User'
end

Поля базы данных - это то, что вы ожидаете: Challenge имеет user_id и target_id, User имеет username и некоторые поля, связанные с паролем.

Из пустой базы данных я создаю двух пользователей (которые получают идентификаторы 1 и 2) и одного Challenge с user_id 1 и target_id 2. Из консоли Challenge.find(1).target возвращает пользователя 2, как и ожидалось. не ожидается, что User.find(1).challenge.target вернет не пользователя 2, а самого Challenge!

Само собой разумеется, я здесь потерян. Кажется, что-то это базовое должно просто работать (тм). Есть идеи?

1 Ответ

1 голос
/ 07 мая 2011

Вы делаете что-то не так здесь. У пользователя есть один вызов, который должен быть таким:

class User < ActiveRecord:Base
  has_one :challenge
end

class Challenge < ActiveRecord:Base
  belongs_to :user
end

Теперь у задания просто есть идентификатор_пользователя, и теперь вы можете использовать что-то вроде:

user.challenge

чтобы получить этот вызов. Тогда у вас просто есть претендент_ид для человека, который принимает вызов.

Если вы хотите получить вызов на основе challengeer_id, вы просто создаете искатель или область видимости, например:

Challenge.find_by_challenger_id(..)

РЕДАКТИРОВАТЬ - РЕШЕНИЕ В МОЕМ КОММЕНТАРИИ НИЖЕ:

Хм, я думаю, что цель метод ассоциации. Попробуйте изменить на что-то вроде претендента, и я думаю, это будет работать.

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