Вот совок:
В качестве учебного упражнения я пытаюсь написать клон Rails одной из многих игр на основе определения местоположения (Foursquare, Gowalla и т. Д.). У меня есть пользователи, которые создают и в магазины.
В терминах ActiveRecord:
:user has_many :stores
:store belongs_to :user
Но теперь я создал третью модель - Checkins. Таблица позади модели содержит два поля: user_id (для записи, какой пользователь сделал проверку) и store_id (для записи, в какое хранилище зарегистрировался этот пользователь).
Еще раз, в терминах AR:
:checkin belongs_to :user
:checkin belongs_to :store
:user has_many :checkins
:store has_many :checkins
Все это работает хорошо - в моих представлениях «Пользователь» и «Магазин» я могу вызывать @ user.checkins и @ store.checkins соответственно. Единственное, таким образом, я могу получить только user_id или store_id, где я действительно хочу получить имя пользователя или имя магазина. Поэтому я считаю, что промежуточная таблица регистрации отлично подходит для использования: through:
:user has_many :stores, :through => :checkins
:store has_many :users, :through => :checkins
Это имеет смысл, но дело в том, что пользователь уже has_many хранит - те, которые он создал! И на его странице пользователя мне нужно перечислить и магазины, которые он создал, и те, в которых он зарегистрировался. Я все еще пытаюсь обернуть голову вокруг has_many_and_belongs_to, так что я не уверен, установит ли это меня в правильном направлении. Кто-нибудь хочет предложить подсказку?