Rails:多种模型的优点和缺点

时间:2015-06-16 03:40:21

标签: ruby-on-rails ruby models

我正在运行Rails 4应用程序,并对如何构建它有疑问。我的申请有users。这些用户可以将许多字段分组到类别中,例如Personal InfoWork InfoHome等。

我的问题涉及是否应为每个子组制作单独的模型,以便users具有多个has_one关联,或者只是按以下方式命名字段:personal_info_namepersonal_info_addresswork_info_address

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

优点:

  • 组织
  • 可读性

缺点:

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

是否有" Rails-way"做这个/有多个模型的其他优点/缺点是什么?

P.S。

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

2 个答案:

答案 0 :(得分:1)

您仍应使用正确的has_one关系,但可以使用ActiveRecord delegate来创建快捷方式:

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

答案 1 :(得分:0)

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