使用现有的推文模型实现转推功能
Posted
技术标签:
【中文标题】使用现有的推文模型实现转推功能【英文标题】:Implementing a Retweet function with an existing Tweet model 【发布时间】:2021-02-08 12:39:06 【问题描述】:我正在尝试为 Twitter 克隆实现转推(转发)功能。我最初认为我可能需要一个单独的转发模型,但我想尝试使用我现有的推文(微博)模型来实现它。
我无法理解架构以及我需要运行哪些迁移。 Micropost 需要一个 Repost 列,但用户需要一个 repost_id 吗?所以我会在 Micropost 中添加一个 Repost 列,它会引用 User?还是我应该将列添加到 User 模型中?
如果转发功能与创建功能类似,不是吗?
def repost
@micropost = Micropost.find(params[:id])
@repost = @micropost.repost by current_user
if @repost.save
flash[:success] = "Repost created!"
redirect_to root_url
else
@feed_items = current_user.feed.paginate(page: params[:page])
render 'static_pages/home'
end
end
有什么方法可以编辑我当前的 Micropost 模型,还是我需要使用特定的 Repost 模型?
【问题讨论】:
【参考方案1】:我的方式是询问我是否需要转发和用户之间的一对多或多对多关系。一个用户可以拥有(制作)许多转发,并且转发可以被许多用户转发,所以这将是多对多的关系。这意味着您需要用户和微博之间的联合表 - 在这种情况下,它的最佳名称是转发。
如果您想反过来考虑 - 您提出的方式:如果您要在 user_id 列中引用 micropost 表中的用户 ID,则只有“足够的空间”来保存一个用户 ID。 .. 所以这将是一个一对多的关联,这对于转发没有多大意义。
对于您关于该方法的问题,一旦用户单击按钮(提交表单)进行转发,您将需要创建一个新的转发实例。你应该看看嵌套资源:https://guides.rubyonrails.org/routing.html#nested-resources
【讨论】:
以上是关于使用现有的推文模型实现转推功能的主要内容,如果未能解决你的问题,请参考以下文章