2

我将用一个示例来解释我想实现的行为。Rails:如何进行动态关联

如果你有一个项目管理应用程序,并且你添加了一个任务,但并非所有的贡献者都是该应用程序的用户。 因此,当您向任务添加贡献者时,您可以输入用户名或电子邮件地址。

这里是我发现有点棘手的部分。 task模型有许多贡献者通过user模型链接,但从这一点上我想实现2件事情。

  1. 商店的非成员的电子邮件(这显然是相当简单)

  2. 如果该电子邮件地址是创建一个帐户,然后将用户链接到任务和删除临时保存电子邮件。

这样,当该用户创建一个帐户时,所有相关的任务将已经与他们的电子邮件相关联。

这是我可以通过多态关联实现的东西吗?或者有什么我应该看的?

回答

1

涉及多态关联的部分很多tasks有很多contributors

有许多方法可以实现您所需的其他功能。

我可能会通过创建一个新的contributor记录来存储临时电子邮件地址,而不会出现其他字段,例如password。当用户真正注册时,我会使用first_or_create方法来完成用户帐户的设置。

这消除了存储临时电子邮件和转移任务所有权的需要。在注册之前,用于链接contributortaskid与注册之后使用的是相同的。

+0

我正在使用设计,我很确定在注册时验证电子邮件地址的唯一性,因此用户将成为许多项目和该项目任务中的许多任务的贡献者。我可以有一个专栏,当没有用户与电子邮件注册时存储电子邮件我搜索贡献者表并将它们链接起来?基本上创建一个contributor_id可以被链接到一个user_id以后? –

+0

对不起,我只是回到你身边。要回答“当没有用户与电子邮件相关时,我可以有一个存储电子邮件的列,那么当我搜索撰稿人表并将其链接起来?”是的,Devise可能需要配置为仅通过电子邮件创建这些'contributor'记录,但这与您如何使用诸如'before_create'之类的方法验证记录有关。我建议你要么有'contributor_id'或'user_id',而不是两者。贡献者表可以包含完整记录(已注册人员)和不完整记录(仅包含电子邮件) – Dru

+0

当人员实际注册时,使用'first_or_create'。如果电子邮件地址已存在,这将使用密码和其他信息更新不完整的记录。更多关于first_or_create的信息http://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-first_or_create] – Dru