我正在运行Rails 4应用程序,并对如何构建它有疑问。我的申请有users
。这些用户可以将许多字段分组到类别中,例如Personal Info
,Work Info
,Home
等。
我的问题涉及是否应为每个子组制作单独的模型,以便users
具有多个has_one
关联,或者只是按以下方式命名字段:personal_info_name
, personal_info_address
,work_info_address
等
以下是我对分组模型的一些想法:
优点:
缺点:
是否有" Rails-way"做这个/有多个模型的其他优点/缺点是什么?
P.S。
我已经读过一些关于"脂肪模型,瘦小的控制器"想法,但我不确定我是否完全理解它们(如果它们与问题有关)。
答案 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等),以防止数据库混乱。祝你好运!