【问题标题】:Rails: Pros and Cons of multiple modelsRails:多种模型的优缺点
【发布时间】:2015-06-16 03:40:21
【问题描述】:

我正在运行一个 Rails 4 应用程序,并且对如何构建它有疑问。我的应用程序有users。这些用户有很多字段可以归类,如Personal InfoWork InfoHome等。

我的问题涉及我是否应该为这些子组中的每一个创建单独的模型,以便 users 有许多 has_one 关联,或者只是按以下方式命名字段:personal_info_namepersonal_info_address、@987654329 @等

以下是我对模型分组的一些想法:

优点:

  • 组织
  • 可读性

缺点:

  • 占用更多数据库空间
  • 更多模型意味着更多文件/开销

是否有“Rails-way”来做到这一点/拥有多个模型的其他优点/缺点是什么?

附:

我读过一些关于“胖模型,瘦控制器”的想法,但不确定我是否完全理解它们(如果它们与问题有关)。

【问题讨论】:

  • 我认为这更像是一个数据库建模问题,而不是 Rails 问题
  • 您如何建议我更改标签/标题以反映这一点?

标签: ruby-on-rails ruby models


【解决方案1】:

您仍应使用正确的has_one 关系,但使用 ActiveRecord delegates 创建快捷方法:

class User < ActiveRecord::Base
  has_one :personal_info, ...
  has_one :work_info, ...
  delegate :personal_info_name, to: 'personal_info.name'
  delegate :personal_info_address, to: 'personal_info.address'
  delegate :workd_info_address, to: 'work_info.address'
end

当然,假设您使用 Active Record 作为 ORM。否则,您可以走手动路线:

class User
  attr_accessor :personal_info, :work_info

  def personal_info_name
    personal_info.name unless personal_info.nil?
  end

  def personal_info_address
    personal_info.address unless personal_info.nil?
  end

  def work_info_address
    work_info.address unless work_info_address.nil?
  end
end

【讨论】:

    【解决方案2】:

    好的,这只是众多方法之一。我通常创建一个Profile 模型,它属于一个用户。一个用户可以有一个Profile,或者,如果这个应用程序要发展并允许一个用户管理多个属性,它以后可以有很多个人资料。在这些配置文件中,您可以使用 PGSQL HStore (tutorial here) 来存储许多小的首选项(tel1、tel2、address、address_work 等),以防止数据库混乱。祝你好运!

    【讨论】:

    • 如果我理解正确,您建议使用 HStore 类型将所有字段(工作和个人)放在模型名称 Profile 中?
    • 您可以为工作/个人使用不同的 hstore 字段
    猜你喜欢
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 2021-06-05
    相关资源
    最近更新 更多