Как улучшить эту ассоциацию в Rails - PullRequest
0 голосов
/ 11 декабря 2010

эй, ребята Я хочу создать базу данных и некоторую связь между ними, ниже приведены некоторые описания

  1. Барабанщик и видео - это ассоциация «многие ко многим», потому что иногда на одном видеоклипе появляется более одного барабанщика

  2. Тарелки и видео - это всего лишь связь «многие ко многим», та же причина

  3. Событие и видео - одно-ко-многим, потому что имеет смысл, что одно видео представляет только одно событие

так что для первых двух мое решение использует два знака связи "имеет-и-принадлежит-многим" для обеих сторон, а для третьего я использую простой один-ко-многим: вот код:

class Drummer < ActiveRecord::Base
  has_and_belongs_to_many :videos
end

class Cymbal < ActiveRecord::Base
  has_and_belongs_to_many :videos
end

class Video < ActiveRecord::Base
  has_and_belongs_to_many :drummers
  has_and_belongs_to_many :cymbals
  belongs_to :event
end

class Event < ActiveRecord::Base
  has_many :videos
end

Но я думаю, что полиморфизм - лучшие решения, видео должно применять две многие другие модели, но я не знаю, как сделать полиморфную ассоциацию «многие ко многим», я уже задавал вопрос об этом

Ответы [ 2 ]

1 голос
/ 11 декабря 2010

Как насчет этого:

class Interpreter < ActiveRecord::Base
  belongs_to :video
end

class Drummer < Interpreter
end

class Cymbal < Interpreter
end

class Video < ActiveRecord::Base
  has_and_belongs_to_many :interpreters
  has_and_belongs_to_many :drummers
  has_and_belongs_to_many :cymbals
  belongs_to :event
end

class Event < ActiveRecord::Base
  has_many :videos
end

Video.first.interpreters должен вернуть все барабаны и тарелки, в то время как Video.first.drummers и Video.first.cymbals вернут только соответствующие модели Cymbals и Drummers будут использовать одну базу данныхстол interpreters

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