【问题标题】:How do you model an anonymous user in an existing Rails schema?如何在现有 Rails 模式中为匿名用户建模?
【发布时间】:2017-04-03 19:37:09
【问题描述】:

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

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

  • 类型:“匿名”或“AUP”
  • user_id:仅适用于 AUP
  • notifications_id:仅用于匿名
  • 运动:适合所有人
  • post_date:适用于所有人
  • post_location:所有人

会有一个通知表。通知记录将属于用户或 SportsTweet。我想我会用多态关联来建模。

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

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

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

    【讨论】:

    • 为了让这个答案更有用,请解释一下 The Rails 3 Way - 第 9 章中有用的内容。五年后,当你的答案仍然存在并且 Rails 3 Way 已经绝版并且很难找到你的答案应该仍然有用。
    【解决方案2】:

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

    在某些应用程序中,让访客用户对象在(人类)用户注册或登录之前传递是很有用的。通常,只要浏览器会话持续存在,您希望此访客用户持续存在。

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

    后面是您可能会在 page 中发现有用的代码

    【讨论】:

      猜你喜欢
      • 2021-07-18
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      相关资源
      最近更新 更多