【问题标题】:Making the difference between a tweet and a retweet when showing them在显示推文和转推时区分它们
【发布时间】:2015-04-13 00:44:22
【问题描述】:

&nbsp 我目前正在实现一个类似于 Twitter 的 Web 应用程序。在我的 Twitter 应用程序中,我有一个动作“转推”,这显然也在真实的 Twitter 中。

我是怎么想到实现它的?

我将有一个包含以下列的模型:

  • 1。 retweeted_tweet_id(转发了哪条推文)
  • 2。 who_user_id(谁转发了它)
  • 3。 retweeted_at(转发时间)

&nbsp 一切顺利。当我必须返回所有推文时,我只需要使用“+”来连接 2 个数组(一个包含推文,一个包含转推)。此操作将按时间顺序显示推文,但我将无法添加“由用户名转发”,除非我通过 tweet_id 和 retweeted_at 时间(推文的时间!= retweeted_at_time)再次查询 Retweets 模型以实际确认推文是转推。在确认它是转发后,我添加了“这篇文章是由用户名转发的

&nbsp 这让我想到了我的问题:有没有更简单的方法可以做到这一点?我想不出使用这个模型的任何其他方法。 有没有更有效的模型?

【问题讨论】:

  • 也许在通用架构上考虑其他方法是有意义的?如果推文和转发将在同一张表中,它将使您的生活更轻松。想法?
  • 是的,他们会,但我在 stackoverflow 上读过一篇关于这个stackoverflow.com/questions/11654420/… 的帖子,普遍的共识是这个选项更好。好吧,我还需要在我的模型中添加另一行,因为如果我转发推文,我希望能够添加一些我自己的文本:D
  • 我明白了,如果您更仔细地查看关于您提到的问题的公认答案,他们建议使用 JOIN 或 INCLUDE。这样,您将拥有活动的记录集合,而不是需要连接的 2 个数组。因此,您可以通过用户名获取转发的推文,而无需两次获取数据库。有意义吗?
  • 我认为您指的是为某个用户提取所有推文和转发?如果是这样,那不是我问我是什么的原因。我有疑问的是我需要添加一个特殊的 html 元素让我们说一个

    并在其中写 retweeted by username 但这仅适用于 retweets 。如何在不查询 tweet_id 和 created_at 的情况下验证推文是原始推文还是转推? .必须按时间顺序对页面中显示的所有推文和转推进行排序。 (这就是他们的查询所做的)

标签: ruby-on-rails activerecord twitter


【解决方案1】:

您需要使用.joins.include 来获取您的转发,这样最终您将拥有ActiveRecord 收藏,而不是Array

这意味着您无需再次获取数据库即可获得retweeted_by_username,因为记录已经加载。

我们您可以采用其他方式,选择将推文和转推存储在同一个表中,并使用名为 original_tweet_id 的字段,这样您就可以解决当前的问题,而且您可以更轻松地在转推中添加任何文本,您可以将其作为推文文本存储在记录中。稍后您只需检查 original_tweet_id 以验证这是否是转发。

【讨论】:

  • 我会选择 original_tweet_id 字段,它似乎解决了我在数据库中进行许多查询时遇到的许多问题。感谢您的所有帮助!
猜你喜欢
  • 2016-07-08
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多