Rails: 多种模型的优缺点

Rails: Pros and Cons of multiple models

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

我的问题涉及我是否应该为这些子组中的每一个制作单独的模型以便 users 有很多 has_one 关联,或者只是按以下方式命名字段:personal_info_name, personal_info_address, work_info_address, 等等

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

优点:

缺点:

是否有 "Rails-way" 可以做 this/what 是否有其他一些 pros/cons 用于拥有多个模型?

P.S。

我读过一些关于 "fat model, skinny controller" 的想法,但我不确定我是否完全理解它们(如果它们与问题有关)。

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

您仍然应该使用适当的 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