如何使用ActiveRecord存储/模拟用户/facebook用户/linkedin用户等?
我的应用程序如何使用ActiveRecord存储/模拟用户/facebook用户/linkedin用户等?,activerecord,data-modeling,Activerecord,Data Modeling,我的应用程序 “普通”用户:通过典型注册页面访问的用户 facebook(FB)用户:来自facebook connect的用户 “FB普通”用户:可以同时使用电子邮件/密码*FB connect登录的用户 此外,还有一系列其他openID登录方法(我认为openID本身是不可接受的,因为它不连接帐户,也不允许第三方特定功能(发布到twitter,添加FB帖子等)) 那么,我该如何建模呢 现在我们有了“facebook用户”的用户类?定义的——但是对于“FB普通”用户来说,它变得很混乱——加
- “普通”用户:通过典型注册页面访问的用户
- facebook(FB)用户:来自facebook connect的用户
- “FB普通”用户:可以同时使用电子邮件/密码*FB connect登录的用户
还有其他想法吗?你遇到了地雷 Facebook和LinkedIn都通过使用非关系型的键/值存储来解决这个问题。Facebook使用,LinkedIn使用 如果不受关系模型约定的约束(例如,给定表的所有行都有相同的列),则可以获得更大的灵活性并改变每行的属性。但这样做会牺牲关系模型的一些优点(例如,给定表的所有行都有相同的列)
在RDBMS中,我将使用来构建它。您正在遇到这些地雷之一 Facebook和LinkedIn都通过使用非关系型的键/值存储来解决这个问题。Facebook使用,LinkedIn使用 如果不受关系模型约定的约束(例如,给定表的所有行都有相同的列),则可以获得更大的灵活性并改变每行的属性。但这样做会牺牲关系模型的一些优点(例如,给定表的所有行都有相同的列)
在RDBMS中,我将使用来构建它。我将分解关注点,似乎在一个表中保留具有截然不同字段的记录是没有意义的 只要有一个不保存任何凭据的用户模型/表,并使其与帐户/登录方法具有多个关系,您可以使用STI对不同类型进行建模
class User < AR::B
has_many :accounts
end
class Account < AR::B;end
class PasswordAccount < Account;end
class GoogleAccount < Account;end
class FacebookAccount < Account;end
…
类用户
我会将关注点分开,似乎在一个表中保留字段差异很大的记录是没有意义的
只要有一个不保存任何凭据的用户模型/表,并使其与帐户/登录方法具有多个关系,您可以使用STI对不同类型进行建模
class User < AR::B
has_many :accounts
end
class Account < AR::B;end
class PasswordAccount < Account;end
class GoogleAccount < Account;end
class FacebookAccount < Account;end
…
类用户