如何在现有Rails架构中为匿名用户建模?

时间:2011-12-11 19:47:26

标签: ruby-on-rails activerecord

我正在制作我的第一个简单的Rails应用程序,其中用户提交体育“推文”(例如“网球,壁球”),服务器将其与合作伙伴进行匹配。服务器将根据类似的推文返回您的SportMatches列表,并且您有不同的选项(例如电子邮件,SMS)回复某人的推文并接受他/她作为合作伙伴。最初,建模是直截了当的:用户has_many SportTweets和SportTweet属于User。通知只是用户的一部分,或者它们可以被建模为与用户的一对一关系。

我的业务需求发生了一些变化,因为现在我有匿名用户也可以发布SportTweets。由于他们没有帐户/个人资料,他们还必须通过推文提交通知(例如电子邮件,短信)。我不知道如何模拟这个Rails方式。 SportTweets现在可以是匿名的,也可以是经过身份验证的用户发布的(AUP)。所以,现在,我的SportTweets表将包含以下列:

  • 类型:“anonymous”或“AUP”
  • user_id:仅适用于AUP
  • notifications_id:仅限匿名
  • sports:for all
  • post_date:for all
  • post_location:for all

会有一个通知表。通知记录既属于用户,也属于SportsTweet。我想我会用多态关联对此进行建模。

这看起来不像Rails的方式。有没有人遇到类似的问题?你是怎么解决的?

2 个答案:

答案 0 :(得分:0)

进行了一些搜索,答案是STI。请参阅Rails 3 Way - 第9章。

答案 1 :(得分:0)

如果可以,请使用Devise。我认为这link可能对您有所帮助。

  

在某些应用程序中,即使在(人类)用户注册或登录之前,也可以让guest用户对象传递。通常,只要浏览器会话持续存在,您希望此guest用户保持持久。

     

我们的方法是在数据库中创建一个来宾用户对象,并将其id存储在session [:guest_user_id]中。当(以及如果)用户注册或登录时,我们删除访客用户并清除会话变量。辅助函数current_or_guest_user如果用户未登录则返回guest_user,如果用户已登录则返回current_user。

您可能会在page

中找到有用的代码