我有一个“公司”资源。当用户注册一个免费帐户时,他们只需要输入一个电子邮件地址。当他们希望升级他们的帐户时,我需要从他们那里获取更多详细信息,例如他们的地址。如何最好地建模这个?
- 将地址详细信息存储在公司表中?
- 有一个单独的“地址”表与公司一对一映射,并且升级将在地址上进行新操作?
- 在公司资源上创建一个升级帐户并获取地址信息的操作?
- 创建一个名为“升级”的新资源,将附加地址信息添加到公司表中?
谢谢
我有一个“公司”资源。当用户注册一个免费帐户时,他们只需要输入一个电子邮件地址。当他们希望升级他们的帐户时,我需要从他们那里获取更多详细信息,例如他们的地址。如何最好地建模这个?
谢谢
“溢价”应与“成为/代表公司”分开。我会选择一个单独的Company
模型,有足够的字段用于地址等。
一个Company
将属于:user
,一个User
将拥有一个:company
。
adr
如果您需要有关地址使用哪些字段的提示,请参阅微格式 (http://microformats.org/wiki/adr)。
我可以看到您有一个单独的地址模型,或者只是将其存储在公司中。就个人而言,我可能会选择使用单独的模型,因为在任何给定的系统中,您都可能拥有与多个模型相关联的地址。另一个好处是它有助于将与地址相关的责任与公司分开。
我会像这样设置您的验证:
Class Company
has_one :address
validates_presence_of :address, :if => :upgraded?
validates_presence_of :email
...
private
def upgraded?
<true if user has upgraded, else false>
end
end