2011-03-10 63 views
0

目前,我的Rails(3)应用程序在其关系已知之前创建对象(我存储评论,然后要求用户登录/登录以验证该评论,之后评论得到一个用户分配)。belongs_to默认回退

我想确保每条评论始终回落给用户。为了避免必须到处测试@comment.user。确保用户也允许我validate_presence。

我可以看到两种方式,两者看起来都很难看。也许我错过了Rails或ActiveRecord的一些功能。

  1. 在种子或迁移中,创建ID为1的用户,调用匿名并将其指定为备用。
  2. comment.rb在加载时检查user_id,如果为null,则为其分配User.new。

这是怎么回事?

回答

1

如何为所有评论添加用户记录。即使对于未登录的用户。这仅仅是每个匿名评论的一个记录。而在用户记录中,您可以保留最后的IP地址以及其他内容,例如每天最多匿名评论。

用户登录后,将注释重新分配给正确的用户并删除临时用户。对于新用户注册,将临时用户记录更新为已验证状态。

请注意,每个匿名评论拥有者,但用户未验证。验证状态可以被视为用户属性。

是的,可以在会话中保留未验证的用户数据。但会话有时被配置为存储在数据库中。因此,就磁盘使用情况而言,结果与在主用户表中存储临时用户的结果相同,但数据更加分散。

0

也许暂时存储必要的东西在session中,而不是在数据库中?我不喜欢在数据库中存储部分完整记录的想法。数据库完整性是一个冒险的游戏。或者,您可以创建一个包含文本列的表格,其中包含序列化的不完整对象。

+0

我已经这样做了,但是重写了这部分内容,因为在会话中存储有很多缺点。由于某些原因,请参阅(旧版)railscast:http://railscasts.com/episodes/13-dangers-of-model-in-session。尽管在重写之前,我还没有预见到这种关联的问题。 :( – berkes 2011-03-10 10:42:32