Rails имеет концептуальные дебаты - PullRequest
0 голосов
/ 30 октября 2011

Я создаю приложение, в котором у меня есть иерархические модули (без меня с абсурдными моделями, но концепция та же самая), так как в Animal есть Tracker, а у Tracker есть мобильный телефон, каждый со своим собственным serial_number ... (Animal_id: 10, серийный номер трекера: 12, imei мобильного телефона: 123456789123456)

Каким будет приемлемый способ определения отношений?

Теперь я использую следующую схему:

Animal has_one Tracker, Tracker has_one Cellphone

Cellphone belongs_to Cellphoneable, Tracker belongs_to Trackable

(Это полиморфные отношения)

Что мне трудно понять, так это то, что я сохраняю cellphoneable_id в таблице «Мобильные телефоны», но я начинаю думать, что отношения должны находиться в таблице «Трекер», оставить мобильный телефон в покое и позволить верхним уровням соединиться вниз. .

Я был бы очень признателен, если бы вы, ребята, могли бы помочь мне обсудить это ...

1 Ответ

0 голосов
/ 30 октября 2011

Вот как бы я это сделал, если:

  1. Трекер принадлежит одному животному и одному мобильному телефону
  2. Если у животного может быть только один трекер
  3. Если мобильный телефон может быть подключен к нескольким трекерам и, следовательно, к нескольким животным

Вот код:

class Tracker < ActiveRecord::Base
  belongs_to :animal
  belongs_to :cellphone
end

class Animal < ActiveRecord::Base
  has_one  :tracker
  has_one  :cellphone, :through => :tracker
end

class Cellphone < ActiveRecord::Base
  has_many :trackers
  has_many :animals, :through => :trackers
end
...