Если вам не нужно больше информации о совместной должности (например, когда она поделилась, почему, и т.д. ...)
В модели пользователя
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
, что вы имеете в виду «поделиться с другими пользователями»? –
, что сообщение может быть просмотрено теми, с которыми вы делитесь им, например, как обмен документами в документах google – marioivangf