2013-03-30 3 views
1

Представьте себе список персонажей в игре.Как смоделировать это отношение рельсов, «есть два»?

Мне нужно, чтобы пользователи голосовали, по какому символу счётчика персонажа и можно сохранить его в базе данных.

Batman is strong against Superman

Batman is strong against Joker

Batman is weak against The Riddler


Как я могу смоделировать эти отношения между двумя из одного типа моделей? Batman, Superman and Joker все части того же типа модели Superhero.

Если бы я создать такую ​​же систему на что-то вроде ASP.Net MVC, я хотел бы создать таблицу с именем Counterpicks и имеют два поля source_id и target_id как INT полей и использовать их в качестве внешних ключей по направлению к Superhero таблице. Мне нужно создать модель Counterpick в RoR?

Любые предложения?

ответ

2

Взгляните на абзац «Самостоятельные соединения» в A Guide to Active Record Associations (Rails Guides). То, что вам нужно, также является самостоятельным.

Разница между вашим случаем и примером в Rails Guides заключается в том, что вам нужно отношение «многие ко многим» внутри модели Superhero, в то время как пример показывает тип отношения has_many.

В обоих типах ассоциаций «многие-ко-многим» в Rails (has_and_belongs_to_many и has_many through) требуется таблица соединений в базе данных. Стол Counterpicks, который вы упомянули, представляет собой таблицу соединений.

В вашем случае это будет в конечном итоге выглядит немного как это:

class Superhero < ActiveRecord::Base 
    has_and_belongs_to_many :losers, :class_name => "Superhero", :foreign_key => "winner_id" 
    has_and_belongs_to_many :winners, :class_name => "Superhero", :foreign_key => "loser_id" 
end