2012-04-28 68 views
0

我對Rails比較陌生,我試圖弄清楚我的應用程序的理想模型結構,這是一個簡單的家庭維護提醒服務。應用程序的中心模型是一個主頁。Rails中的模型結構

每個家庭有很多設備(如洗碗機,洗衣機,熱水器等)。

每臺設備都有一組與其相關的提醒(即,如果您有熱水器,則必須每3個月執行一次XYZ,每6個月執行一次ABC)。

定期(每月/每週),有一封郵件發送給房主,並列出所有提醒。

我想弄清楚這個最好的模型結構。

現在,這些是我有的模型,但我不知道這是否過度殺傷?

  • 首頁(地址,郵政編碼等)
  • 電器(名稱,生產商)
  • 提醒(APPLIANCE_ID,提醒,頻率)
  • HomeAppliance(HOME_ID,APPLIANCE_ID)
  • HomeReminders(HOME_ID ,Reminder_ID)

的關聯:

  • 首頁的has_many HomeAppliances
  • 電器的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 :throughhttp://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

在原來的例子中,你似乎想存儲各種預先定義的設備在數據庫以供參考。我會做不同的事情。使用各種品牌和型號的配置文件,您可以使用它們在用戶設置設備詳細信息時使用的表單上填充下拉菜單。然後,您可以跳過額外的模型,並按照上面的描述簡化事情。

+0

謝謝,這是我最初的想法,但不會導致數據庫中有太多重複的信息?例如,如果主頁有多個設備,則設備表將爲每個主頁設置多行,每行包含有關設備的詳細信息。此外,如果設備具有多個提醒,每個設備的提醒信息將在提醒表的每一行中重複。每個提醒都可以包含一段信息。我正在考慮對這種建模進行類似於如何在這些用戶之間建模「關係」的方法:http://goo.gl/UofDw。思考? – tarunsachdeva 2012-04-28 17:51:51

+0

這就是爲什麼我創建了一個類似於家庭(HomeAppliance和HomeReminder)的「關係」的模型。 – tarunsachdeva 2012-04-28 17:52:58

+0

如果您擔心由於重複造成的空間不足,那麼是的,爲家庭 - >設備映射添加查找表是個不錯的主意。我仍然使用has_many:through關係來避免使用關係查找表,假設它所做的全部都是將設備映射到提醒。 – 2012-04-28 20:06:54