0

Я только начинаю в Ruby On RailsActiveRecord две различные ассоциации между теми же моделями

У меня есть модели пользователя

class User < ActiveRecord::Base 
    has_many :posts 
end 

и модель Публиковать

class Post < ActiveRecord::Base 
    belongs_to :author, foreign_key: 'user_id', class_name: 'User' 
end 

Я хочу, чтобы пользователи делятся записью с другими пользователями, но я потерялся полностью, я пробовал многому, чтобы общаться с таблицей. Обмен и использование: через, но я только больше смутился, я мог бы действительно использовать руку, спасибо заранее.

+0

, что вы имеете в виду «поделиться с другими пользователями»? –

+0

, что сообщение может быть просмотрено теми, с которыми вы делитесь им, например, как обмен документами в документах google – marioivangf

ответ

0
  • первое решение

Если вам не нужно больше информации о совместной должности (например, когда она поделилась, почему, и т.д. ...)

В модели пользователя

class User < ActiveRecord::Base 
    # created posts 
    has_many :posts, 
     :foreign_key => :user_id 
    # shared posts 
    has_and_belongs_to_many :shared_posts 
end 

В сообщении модели

class Post < ActiveRecord::Base 
    belongs_to :author, class_name: 'User' 
    has_and_belongs_to_many :viewers 
end 

миграции

create_table :posts_users do |t| 
    t.references :user 
    t.references :post 
end 

второе решение

Если вам нужна дополнительная информация (если она была разделена, делает пользователь может комментировать, или ...). Вы должны использовать through

В пользовательской модели

class User < ActiveRecord::Base 
    # created posts 
    has_many :posts, 
     :foreign_key => :user_id 
    # shared posts 
    has_many :shares, 
     class_name: "Post" 
    has_many :shared_posts, 
     through: :shares 
end 

В сообщение модели

class Post < ActiveRecord::Base 
    belongs_to :author, 
     class_name: 'User' 
    # shared posts 
    has_many :shares 
    has_many :viewers, 
     through: :shares 
end 

В Доля модели

class Share < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :post 
end 

См также Choosing between has_many_and_belongs_to has_many through

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