Как реализовать модель диалогов в Rails?

Хочу реализовать модель диалогов в своем приложении (в точности как ВК). Есть модели User, Conversation, Message.

class User < ActiveRecord::Base
   has_and_belongs_to_many :conversations, dependent: :destroy
   has_many :messages, through: conversations

class Conversation < ActiveRecord::Base
   has_and_belongs_to_many :users
   has_many :messages

class Message < ActiveRecord::Base
   belongs_to :user
   belongs_to :conversation

Также нужна соединительная таблица для users и conversations:
def change
    create_table :conversations_users do |t|
      t.integer :user_id
      t.integer :conversations_id

      t.timestamps null: false
    end
  	add_index :conversations_users, :user_id
    add_index :conversations_users, :conversation_id
    add_index :conversations_users, [:user_id, :conversation_id]
  end
end


Когда я хочу написать некому @user первый раз, то создается диалог:
def create
 current_user.conversations.create!(user1_id: current_user.id, user2_id: @user.id)
end

Нужно, чтобы у этого @user создался диалог (общий с моим), в котором мы бы обменивались сообщениями.
Я так понял, что при переписке пользователей, у каждого есть свой диалог друг с другом, в котором они могут удалять ненужные сообщения.
Не понимаю немного как выстроить эту архитектуру. Господа рубисты, прошу Вашей помощи
  • Вопрос задан
  • 503 просмотра
Решения вопроса 2
@man_without_face
студент
Ответ написан
Комментировать
@vsuhachev
Если Conversation нечто скрытое от пользователя (т.е. нельзя управлять явно, создавать, добавлять участников, удалять и т.п.) - оно не нужно, достаточно в сообщении указать отправителя и получателя. А в представлении выбирать и выводить соответствующие сообщения
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы