Моделирование отношений Rails - PullRequest
0 голосов
/ 14 сентября 2010

У меня есть таблица пользователей и таблица подарков. Пользователи могут выбирать подарки для своих друзей. Я думаю о создании таблицы для хранения идентификатора пользователя и идентификатора подарка, чтобы отслеживать, какой пользователь выбрал какой подарок для кого. Как смоделировать это отношение? Я думаю, что пользователи и подарки имеют отношение к HABTM. Это верно?

Ответы [ 2 ]

2 голосов
/ 14 сентября 2010

Попробуйте это:

class User < ActiveRecord::Base
  has_many :user_gifts
  has_many :gifts, :through => :user_gifts  

  has_many :rcvd_user_gifts, :class_name =>"UserGift", :foreign_key => :friend_id
  has_many :rcvd_gifts, :through => :rcvd_user_gifts, :source => :gift
end

class UserGift < ActiveRecord::Base
  # user_id
  # friend_id
  # gift_id

  belongs_to :user
  belongs_to :friend, :class_name => "User"
  belongs_to :gift

end

class Gift < ActiveRecord::Base
  has_many :user_gifts
  has_many :senders, :through => :user_gifts, :source => :user
  has_many :receivers, :through => :user_gifts, :source => :friend
end

Теперь возможны следующие звонки:

user.gifts      # Gifts given by a user:
user.rcvd_gifts # Gifts received by a user:
gift.senders    # Users sending a gift
gift.receivers  # Users receiving a gift

Убедитесь, что вы индексировали столбцы user_id, friend_id, gift_id в таблице user_gifts.

0 голосов
/ 14 сентября 2010

Ну, во-первых, это трехстороннее отношение, так как у вас есть Пользователи -> Друзья, а также Пользователи -> Подарки.

Я бы пошел с has_many: через и сохранил там у другаЯ БЫ.Запрос будет немного неловким, но он должен работать.

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