用于帖子和喜欢的Rails模型和脚手架

时间:2017-12-07 06:47:39

标签: ruby-on-rails mongodb mongoid ruby-on-rails-5

我想在我的应用程序中为“Like”功能生成模型和脚手架。该应用程序具有“发布”模型和“用户”模型。用户可以“喜欢”不同的帖子(就像任何其他社交网络软件一样)

我正在使用mongoid和ROR 5.

用户模型:

class User
  include Mongoid::Document
  field :created_at, type: String
  field :updated_at, type: String

  has_many :posts
end

邮政模特:

class Post
  include Mongoid::Document
  field :created_at, type: String
  field :updated_at, type: String

  belongs_to :user        
end

什么是合适的“喜欢”型号?我最好的猜测是“喜欢”应该嵌入在用户模型中,而“belongs_to”应该嵌入到帖子中。

如何搭建Like模型? “用户”或“发布”模型将如何改变结果?

1 个答案:

答案 0 :(得分:0)

这实际上取决于你如何使用该系列。

当您在Like中嵌入User集合,但希望在每个帖子上显示相同的计数时,嵌入式解决方案似乎是多余的。反之亦然,嵌入Post

您可以在不影响LikeUser

的情况下创建独立集合Post的最简单方法
class Like
  include Mongoid::Document
  field :user_id, type: String
  field :post_id, type: String
end

并将其用作SQL关系(与UserPost之间的关系相同)

class User
  # ...
  has_many :likes
end

class Post
  # ...
  has_many :likes
end

创建Like时需要额外检查以确保用户只能使用一次帖子。

为了提高速度(无需关心结构),您可以跳过Like集合并将引用直接嵌入UserPost。当有喜欢动作

时,这种方式需要更多额外的检查
class User
  # ...
  field :liked_post_ids, type: Array, default: []
end

class Post
  # ...
  field :liked_user_ids, type: Array, default: []
end

在NoSQL世界中,结构取决于您如何使用数据,而不是它有多漂亮。但在我看来,您应该创建独立的Like集合。