2012-04-28 3 views
0

Я относительно новичок в Rails, и я пытаюсь найти идеальную модельную структуру для своего приложения, которое является простым напоминанием для домашнего обслуживания. Центральная модель в приложении - это дом.Структура модели в Rails

В каждом доме есть много приспособлений (например, посудомоечная машина, прачечная, водонагреватель и т. Д.).

У каждого устройства есть набор напоминаний, связанных с ним (т. Е. Если у вас есть водонагреватель, вы должны делать XYZ каждые 3 месяца и ABC каждые 6 месяцев).

На регулярной основе (ежемесячно/еженедельно) есть почтовая программа, отправленная владельцу дома со списком всех напоминаний.

Я пытаюсь выяснить, какая модель наилучшей модели для этого.

Прямо сейчас, это модели, которые у меня есть, но я не знаю, является ли это излишним или нет?

  • Главная (Адрес, почтовый индекс и т.д.)
  • Appliance (Имя, Производитель)
  • Reminder (APPLIANCE_ID, напоминание, частота)
  • HomeAppliance (Home_ID, APPLIANCE_ID)
  • HomeReminders (Home_ID , Reminder_ID)

Объединения:

  • Главная has_many HomeAppliances
  • Appliance has_many Напоминания
  • Главная HAS_MANY HomeReminders

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

ответ

1

Я бы выбрал что-то менее сложное. Вам нужно три модели:

class Home < ActiveRecord::Base 
    has_many :appliances 
    has_many :reminders, :through => :appliances 
end 

class Appliance < ActiveRecord::Base 
    belongs_to :home 
    has_many :reminders 
end 

class Reminder < ActiveRecord::Base 
    belongs_to :appliance 
end 

Обратите внимание, что мы используем has_many :through отношения, чтобы позволить нам позвонить home.reminders напрямую.

Смотрите пример документа здесь для получения дополнительной информации о has_many :through: http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

В оригинальном примере вы, кажется, хочет, чтобы хранить различные предопределенные приборы в БД для справки. Я бы сделал это по-другому. У вас есть файл конфигурации с различными марками и моделями, которые вы можете использовать для заполнения выпадающих списков в форме, которую пользователи используют при настройке своих деталей устройства. Затем вы можете пропустить дополнительные модели и упростить все, как описано выше.

+0

Спасибо, это то, что я изначально думал, но не приведет ли это к столь много повторяющейся информации в БД? Например, если в Доме есть несколько устройств, таблица Appliance будет иметь несколько строк для каждого Home, каждая строка содержит подробную информацию об устройстве. Кроме того, если Appliance has_many Reminders, информация напоминания для каждого устройства будет повторяться в каждой строке таблицы напоминаний. Каждое напоминание может содержать абзац информации. Я думал о моделировании этого, похожего на то, как модели «отношения» моделируются между пользователями здесь: http://goo.gl/UofDw. Мысли? – tarunsachdeva

+0

Вот почему я создал модели, похожие на «Отношения» для дома (HomeAppliance и HomeReminder). – tarunsachdeva

+0

Если вы беспокоитесь о нехватке места из-за дублирования, то да, добавление таблицы поиска для домашнего -> отображения устройств - хорошая идея. Я все равно использую has_many: через отношение, чтобы избежать наличия таблицы поиска отношений, предполагая, что все, что она делает, - это сопоставление устройств с напоминаниями. –

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