我想在我的应用程序中为“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模型? “用户”或“发布”模型将如何改变结果?
答案 0 :(得分:0)
这实际上取决于你如何使用该系列。
当您在Like
中嵌入User
集合,但希望在每个帖子上显示相同的计数时,嵌入式解决方案似乎是多余的。反之亦然,嵌入Post
您可以在不影响Like
或User
Post
的最简单方法
class Like
include Mongoid::Document
field :user_id, type: String
field :post_id, type: String
end
并将其用作SQL关系(与User
和Post
之间的关系相同)
class User
# ...
has_many :likes
end
class Post
# ...
has_many :likes
end
创建Like
时需要额外检查以确保用户只能使用一次帖子。
为了提高速度(无需关心结构),您可以跳过Like
集合并将引用直接嵌入User
和Post
。当有喜欢动作
class User
# ...
field :liked_post_ids, type: Array, default: []
end
class Post
# ...
field :liked_user_ids, type: Array, default: []
end
在NoSQL世界中,结构取决于您如何使用数据,而不是它有多漂亮。但在我看来,您应该创建独立的Like
集合。