Ruby on rails Rails最佳实践-如何处理可能具有相同记录的唯一用户?

Ruby on rails Rails最佳实践-如何处理可能具有相同记录的唯一用户?,ruby-on-rails,database-design,user-interface,Ruby On Rails,Database Design,User Interface,如何处理实名冲突?是否有一个既定的最佳实践或UI设计模式来消除此类记录的歧义?如果作者可以有多篇文章,但多个作者可能有相同的名字,您如何让用户在创建文章时选择他们真正想要的作者 我不能规定作者的名字是唯一的。作者可能有一些其他信息可以使他们个性化(他们的文章或其他可选字段) 更清楚地说,用户不是作者。用户是输入作者和文章信息的人。提交给作者的唯一保证信息是作者的姓名。其他细节是可选的 因此,如果用户正在为一篇文章创建一个新记录,那么他们必须为作者与文章之间的多对多关系选择或创建一个作者 有了明确

如何处理实名冲突?是否有一个既定的最佳实践或UI设计模式来消除此类记录的歧义?如果作者可以有多篇文章,但多个作者可能有相同的名字,您如何让用户在创建文章时选择他们真正想要的作者

我不能规定作者的名字是唯一的。作者可能有一些其他信息可以使他们个性化(他们的文章或其他可选字段)

更清楚地说,用户不是作者。用户是输入作者和文章信息的人。提交给作者的唯一保证信息是作者的姓名。其他细节是可选的

因此,如果用户正在为一篇文章创建一个新记录,那么他们必须为作者与文章之间的多对多关系选择或创建一个作者

有了明确的rails示例,比如博客文章类别下拉列表,就像ryan bates在他的railscasts中使用的那样,创建或更新都很容易。如果存在,将博客文章链接到它,如果没有,则创建并将博客文章链接到它


我的情况更糟。如果它存在的话就没有那么有意义了,但我不想为作者所做的每一篇文章都创建一个单独的作者条目。

大概你有一个密钥,这意味着你知道哪些用户编写了哪些记录,所以归结起来就是如何最好地为用户消除歧义

也许你需要要求你的作者在他们的个人资料中对他们自己做一个简短的总结,你可以用它来消除他们对他们的术语的歧义。或者,根据文章的类型,您可以选择从地理角度(“约翰·比格斯,佛罗里达州”、“约翰·比格斯,加利福尼亚州”)或他们选择的主题领域来描述他们:“约翰·比格斯,Java专家”、“约翰·比格斯,印度尼西亚专家”等等

你甚至可以有“约翰·比格斯(1)”,“约翰·比格斯(2)”等等。我似乎记得这对IMDB来说是可行的,IMDB是一个很好的例子,说明了一个网站必须解决这个问题


在可用性方面,考虑到这些类型的东西,最重要的是一致性——你需要始终以相同的方式识别你的作者,这样你就不会有“John Biggs,Florida”和“John Biggs(2)”,并且你需要确保你给作者的身份在设置后不会改变,所以“John Biggs(2)”永远不会变为一致“John Biggs(5)”和您的用户可以识别他们,只要他们看到消除歧义的名称与以前的名称相同。

您可能有一个密钥,这意味着您知道哪些用户编写了哪些记录,因此,问题在于如何为您的用户最好地消除歧义

也许你需要让作者在他们的个人资料中对他们自己做一个简短的总结,你可以用它来消除他们对他们的术语的歧义。或者,根据文章的类型,你可以选择从地理角度来描述他们(“约翰·比格斯,佛罗里达州”,“约翰·比格斯,加利福尼亚州”)或者根据他们选择的主题领域:“John Biggs,Java专家”,“John Biggs,印度尼西亚专家”等等

你甚至可以有“John Biggs(1)”,“John Biggs(2)”等等。我似乎记得这对IMDB来说很有效,IMDB就是一个很好的例子,一个必须解决这个问题的站点


在可用性方面,考虑到这些类型的东西,重要的是一致性——你需要始终以相同的方式识别你的作者,这样你就不会有“约翰·比格斯,佛罗里达州”和“约翰·比格斯(2)”,你需要确保你给作者的身份在设置后不会改变,所以“约翰·比格斯(2)”永远不会变为John Biggs(5)“当您的用户看到消除歧义的姓名与以前的姓名相同时,他们就可以识别他们。

您没有!您发现姓名是一种糟糕的识别方法。您有很多方法可以解决这一问题:

为普通用户添加某种形式的唯一标识符这将是一个用户名,用于检查唯一性。在您的情况下,如果您确实除了名称之外没有其他信息,则可能必须使用上述名称(1)所述的方法


另一种方法是使用多个属性来生成复合密钥(例如name+dob)

您不需要!您发现名称是一种糟糕的识别方法。您有很多方法可以解决这一问题:

为普通用户添加某种形式的唯一标识符这将是一个用户名,用于检查唯一性。在您的情况下,如果您确实除了名称之外没有其他信息,则可能必须使用上述名称(1)所述的方法


另一种方法是使用多个属性生成复合键(例如,name+dob)

在过去的项目中,有一件事对我很有用,那就是有一个文本框,用户可以在其中键入作者的姓名。当他们键入时,我用可能的匹配项更新div-类似于在“忽略”或“感兴趣”框中键入标记时的堆栈溢出

用户可以单击div中的一个名称,在一个新窗口中打开记录-新窗口有一个按钮,“选择此作者”,它会将您带回原始页面,文本字段中的作者作为作者名称(id)

如果他们提交的表单名称模棱两可,我们还有一个额外的步骤来显示匹配项,然后他们选择所指的匹配项


我想,如果这是一个数据输入类型的应用程序,您可能会想要一些更精简的东西,但在该项目中,添加作者是一个不常见的操作。

在过去的项目中,对我来说,有一件事很管用,那就是有一个文本框,用户可以在其中键入作者的姓名。当他们键入时,我用可能的匹配项更新div-类似在“忽略”或“感兴趣”框中键入标记时堆栈溢出

用户可以单击div中的一个名称,在一个新窗口中打开记录-new win