什么时候可以使用多个设计模型?

时间:2012-12-20 07:07:30

标签: ruby-on-rails ruby-on-rails-3 devise omniauth

什么时候可以使用多个设计模型?

我有3种类型的用户 - 用户,供应商和管理员。供应商拥有比用户更多的字段,因此我希望为它们提供单独的表。用户可以使用Facebook注册并登录(供应商不能)。用户和供应商共享相同的登录页面/表单。

我从多个设计模型开始,对如何处理单个登录页面感到困惑,然后在这里阅读了很多关于使用多态关联和STI而不是离散模型的内容。我仍然对何时应该使用每种方法以及哪种方法在这里工作得更好而感到困惑...我知道它有点含糊不清,任何建议都会很棒,或者任何好的链接......

用户在注册时也会填写一些额外的字段 - 即使是通过Facebook。如何跟踪omniauth登录的字段? (我应该使用这个或类似omniauth身份的设计......?)

感谢您的关注!我是第一次设置身份验证的rails newbie,非常感谢帮助

1 个答案:

答案 0 :(得分:1)

根据具体情况,建议分离或使用单个型号。替代方案:

  1. 使用单独的模型,覆盖控制器,因此首先检查记录是否与用户匹配,如果不匹配则尝试使用供应商
  2. 使用单个模型存储用户和供应商,使用布尔值(如果是多态关联,则使用字符串)检查用户类型,并添加相关模型以存储其他字段
  3. 我认为选项#1更容易但更大,选项#2有点困难但更短。

    此外,将模型分开是一个好主意,因为用户连接到FB和供应商否,它代表了很多差异。

    另一方面,使用选项#2搜索会更快,因为它只有1个查询,并且表格很轻,因为它不包含用户和供应商的特定字段;你还必须考虑这个问题才能做出决定。

    对于管理员,您可以遵循类似的标准。

    检查出来:https://github.com/mkdynamic/omniauth-facebook