【问题标题】:Model Structure in RailsRails 中的模型结构
【发布时间】:2012-04-29 00:37:47
【问题描述】:

我对 Rails 比较陌生,我正在尝试为我的应用程序找出理想的模型结构,这是一个简单的家庭维护提醒服务。应用中的中心模型是 Home。

每个家庭都有很多电器(例如洗碗机、洗衣机、热水器等)。

每台设备都有一组与之相关的提醒(即,如果您有热水器,则必须每 3 个月执行一次 XYZ,每 6 个月执行一次 ABC)。

会定期(每月/每周)向房主发送一封包含所有提醒清单的邮件。

我正在尝试为此找出最佳模型结构。

目前,这些是我拥有的模型,但我不知道这是否矫枉过正?

  • 家庭(地址、邮政编码等)
  • 设备(名称、制造商)
  • 提醒(Appliance_ID、提醒、频率)
  • 家用电器(Home_ID、Appliance_ID)
  • HomeReminders (Home_ID, Reminder_ID)

协会:

  • Home has_many HomeAppliances
  • 设备有_many提醒
  • 首页 has_many HomeReminders

感谢任何帮助。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案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

    在您的原始示例中,您似乎希望将各种预定义的设备存储在数据库中以供参考。我会做不同的事情。拥有一个包含各种品牌和型号的配置文件,您可以使用这些配置文件来填充用户在设置其设备详细信息时使用的表单上的下拉菜单。然后,您可以跳过额外的模型并如上所述简化事情。

    【讨论】:

    • 谢谢,这是我最初的想法,但这不会导致数据库中出现如此多的重复信息吗?例如,如果一个 Home 有多个 Appliance,则 Appliance 表将为每个 Home 包含多行,每行包含有关该 Appliance 的详细信息。此外,如果一个 Appliance has_many Reminders,每个设备的提醒信息将在 Reminder 表的每一行中重复。每个提醒可以包含一段信息。我正在考虑对此进行建模,类似于此处用户之间的“关系”建模方式:goo.gl/UofDw。想法?
    • 这就是为什么我为家庭创建了一个类似于“关系”的模型(HomeAppliance 和 HomeReminder)。
    • 如果您担心由于重复而导致空间不足,那么可以,为家庭 -> 设备映射添加查找表是个好主意。我仍然会使用 has_many :through 关系来避免使用关系查找表,假设它所做的只是将设备映射到提醒。
    • 感谢您的帮助,我会试试这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多