如何创建正确的关联

时间:2017-01-09 21:15:57

标签: ruby-on-rails associations

告诉我如何在模型之间建立如下关系:
- 你可以有很多帖子 - 其他用户可以在墙上写下彼此的位置(如在社交网络中,即,当您可以自己创建记录或者您可以在另一个用户页面上创建它。

2 个答案:

答案 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) 

希望这会有所帮助 感谢。