告诉我如何在模型之间建立如下关系:
- 你可以有很多帖子
- 其他用户可以在墙上写下彼此的位置(如在社交网络中,即,当您可以自己创建记录或者您可以在另一个用户页面上创建它。
答案 0 :(得分:0)
你至少应该尝试自己做,但这里有解决方案:
用户模型:
User (id, name)
has_many :posts
has_many :comments
has_many :commented_posts, through: :comments
发布模型:
Post (id, content, user_id)
belongs_to :user
has_many :comments
评论模型:
Comment (id, content, post_id, user_id)
belongs_to :user
belongs_to :post
答案 1 :(得分:0)
如果您将帖子作为用户可以标记其他用户的媒介,则帖子可以显示在其墙上。
您可以绝对使用帖子写入其他人的墙壁。这就是任何社交平台如何运作,同一个帖子可以作为一个独立的帖子,就像博客用户为他的粉丝或特定社区发布一样。
我是一个类似于平台的社交Feed,标记帖子上的用户是推送任何用户的墙上帖子的唯一方法。
所以我们可以在这里拥有以下实体。
用户
class User < ActiveRecord::Base
has_many :usertags
has_many :posts
end
发布
class Post < ApplicationRecord
has_many :usertags, as: :usertagable
belongs_to :user
has_many :comments ,:as => :commentable
end
Usertag
class Usertag < ApplicationRecord
belongs_to :user
belongs_to :usertagable, :polymorphic => true
end
我已经为usertags构建了多态关系,因为您可以扩展当前架构以包含对帖子的评论以及以下评论模型,这可以使用多态关系来提供。
class Comment < ApplicationRecord
# all the relations for the comment
belongs_to :user
belongs_to :post
belongs_to :commentable, :polymorphic => true
has_many :comments, :as => :commentable
has_many :usertags, as: :usertagable
end
评论反过来属于用户/作者,附加评论的帖子,评论也可以评论,因此它也可以属于可评论。另外评论也可以像用户一样提到用户。
像平台这样的社交Feed,标记帖子上的用户是推送任何用户的墙上帖子的唯一方法。
现在,您可以轻松地获取属于特定用户的所有帖子以及使用标记,评论,评论的作者。
post_list = Post.eager_load(:followers, :user, :communities, :usertags => :user, :comments => [:usertags => :user]).select("*").where("user.id is ?", :user_id)
希望这会有所帮助 感谢。