2013-11-14 2 views
3

У меня возникают проблемы с тем, что, по моему мнению, будет основной ассоциацией.rails association - has_many vs has_and_belongs_to_many

У меня есть модель игры и модель Matchset.

В игровой модели приведен список игр. Игры перечисляются только один раз в таблице игр, но они могут принадлежать многим наборам матчей.

matchset.rb -

has_many :games 

для game.rb Я не уверен, что я бы поставил. Я не хочу ставить property_to, потому что он принадлежит многим наборам матчей, а не только одному. И я не думаю, что хотел бы поставить has_and_belongs_to_many, потому что matchsets не обязательно должны «принадлежать» к играм, но, возможно, я просто смотрю на это неправильно.

Пример: Matchset 1 имеет игры 1, 3 и 5. Matchset 2 имеет 2 игры и 3. Matchset 3 имеет игры 3, 4 и 5.

Мой фон с Oracle SQL и в моей голове таблица Matchset будет выглядеть примерно так.

id | game_id 
1 | 1 
1 | 3 
1 | 5 
2 | 2 
2 | 3 
3 | 3 
3 | 4 
3 | 5 

Любая помощь приветствуется.

ответ

2

Эти отношения должны работать для вас:

class Game < ActiveRecord::Base 
    has_many :game_match_set_relations 
    has_many :match_sets, through: :game_match_set_relations 

class MatchSet < ActiveRecord::Base 
    has_many :game_match_set_relations 
    has_many :games, through: :game_match_set_relations 

class GameMatchSetRelation < ActiveRecord::Base 
    belongs_to :game 
    belongs_to :match_set 

    validates :game_id, presence: true 
    validates :match_set_id, presence: true 
+0

Я думаю присоединиться к модели ненужно – mechanicalfish

+0

Я думаю, что это, @mechanicalfish: ОП сказал 'Игры [...], но они могут принадлежать ко многим Matchsets.' – MrYoshiji

+0

Да, поэтому 'has_and_belongs_to_many' без модели. Разумеется, сама таблица соединений. – mechanicalfish

Смежные вопросы