2017-01-09 4 views
-1

Расскажите мне, как строить отношения между моделями следующим образом:
- Вы можете иметь много сообщений
- Другие пользователи могут писать друг другу позиции на стене (как в социальной . сети, а именно, когда вы можете сам создать запись, или вы можете создать его на другой странице пользователяКак создать правильную ассоциацию

ответ

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 
0

Если вы refereing на должности в среде, с которой пользователь может помечать другим пользователям, так что пост может появиться на стенах.

Вы можете определенно использовать сообщения, чтобы писать стенам других людей. То, как работает любая социальная платформа, тот же пост может выступать в роли автономной почты, такой как пользователь блога, для своих последователей или в частности сообщества.

Я социальный канал, как платформа, теги пользователей на почте - это единственный способ нажимать сообщение на стене для любого пользователя.

Итак, у нас могут быть следующие сущности.

Пользователь

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 

Комментарий в свою очередь, принадлежат пользователям/автору, пост, к которому присоединен комментарий, комментарий может также быть прокомментированы, поэтому он может также принадлежать commentable. Также комментарий может быть упомянутым пользователем, как и сообщения, например, сообщения.

Социальная платформа, такая как платформа, теги пользователей на почте - это единственный способ нажимать сообщение на ленту на стене любого пользователя.

Теперь вы можете легко получить все сообщения, принадлежащие конкретному пользователю, вместе с usertagged, комментариями, авторскими комментариями.

post_list = Post.eager_load(:followers, :user, :communities, :usertags => :user, :comments => [:usertags => :user]).select("*").where("user.id is ?", :user_id) 

Надеюсь, что это поможет Спасибо.

+0

Я отредактировал свой ответ с более подробной информацией о том, как вы можете использовать это, чтобы писать на других пользователях/стенах. Надеюсь, поможет. – user3775217

Смежные вопросы