如何在Ruby on Rails中有效地使用多个数据库表

时间:2012-01-03 21:30:52

标签: ruby-on-rails database database-design activerecord ruby-on-rails-3.1

我给自己一个小项目来帮助我改进我的ruby on rails编程。到目前为止,我已完成完整的用户注册和身份验证密码重置,记住我的功能和通知电子邮件。我完全理解发生了什么。

所以我现在已经转移到用户帐户区域,并希望对用户编辑其个人资料的页面进行编码。我的注册表只询问用户名,电子邮件和密码,因为我想快速注册。对于用户将编辑其个人资料信息的页面,它将询问他们以下内容:

名字 姓 出生日期 地点 它会有他们个人资料的网址 关于我 个人统计 有利于事物 地位等 和他们的照片

他们应该能够动态更新或更改此信息。在他们的实际个人资料页面上,它会为他们的个人资料内容提取此信息。

我想知道要保持井井有条,最好为此创建一个单独的表格,例如轮廓?或者将这些信息存储在数据库的users表中是否明智?例如名字姓氏?

我正在试图找到一种干净的方法来做到这一点,因为稍后我需要添加更多页面,如设置页面等。

这是我第一次使用多个表,我知道如何做但不太确定。任何建议,如简要说明如何实现这一点,将不胜感激。

此致

2 个答案:

答案 0 :(得分:1)

我认为没有必要为用户的个人资料提供单独的表格。我这么说是因为现在用户和个人资料之间的关系是一对一的关系。用户只有一个配置文件。除非用户有多个配置文件,否则我认为您不需要为用户配置文件提供单独的表。你可以简单地在用户表中添加额外的列来存储用户的(可选)属性。

在您的表单上,当用户尚未设置注册期间所需的属性时,您可以将它们保留为空白。对于已设置这些可选属性的用户,您可以通过设置输入标记的value属性在编辑表单上显示它们

<input value='dennis' name='user[first_name]'/>

该按钮将始终进行更新并保存用户属性。

答案 1 :(得分:1)

我知道我会因为过分简化主观情况而得到人们的抨击。但有时,围绕使情况变得主观的情景的公开讨论可以帮助决策。所以,这是我的看法。

您是否正在使用设计或某些此类宝石进行身份验证?如果是,那么您可能根据该gem的要求创建了表。如果您考虑关注点的分离,那么身份验证+授权系统所需的任何内容都包含在您现有的用户表中。我会通过询问来接近它 - 将此配置文件数据(特别是如果它超过几个文本字段)与此表耦合是否有任何好处?我没有看到一个特别是因为配置文件或用户生成的永久数据不再保证只是一个图片和2-3个文本字段。例如,在社交网站上,个人资料可能会有自己的生命。

此外,如果您的网站起飞会发生什么。如果您有一个活动的用户群,可以将图片,位置信息和其他数据添加/更新到配置文件,您是否希望它开始影响您的身份验证表?如果您遇到资源危机,独立的身份验证系统可能是您的最后一个问题。但如果它与用户相关的所有内容相结合,则不是这样。

所以,是的,它确实取决于您的具体情况,但我希望我的上述想法可以让您清楚地了解为什么决定可能会因网站类型的不同而有所不同。如果用户是您系统的核心,并且用户交互是个人资料的关键(例如社交网络),那么一定要考虑将这两个区域分开。如果用户个人资料可能只是关于用户的一行,那么这不是一个大问题。如果你这样做纯粹是为了学习,那么请尝试两种方式,因为你将有更多的武器库来应对未来的挑战。