«Система обмена сообщениями» с несколькими пользователями в разговоре, построенная с нуля в Rails

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

Я искал учебник, но нет никакого учебника или какой-либо конкретной информации, кроме; это -> http://.novawave.net/public/rails_messaging_tutorial.html, но к сожалению, ссылка не работает или это -> потоковый личный обмен сообщениями Rails, но я все еще не могу обернуть голову вокруг всего.

Так что надеюсь, что эта тема послужит ориентиром для других.

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

  1. Нажмите «Отправить сообщение», которое вызовет новый объект беседы.
  2. Добавьте тему и выберите пользователей, которых я хочу видеть в беседе ‹ — здесь становится мутно
  3. внизу без той же формы без ajax, я думаю, я мог бы отобразить форму сообщения, которая отправит текст?

Итак, как мне поместить несколько идентификаторов пользователей в столбец users_id таблицы бесед? Есть предложение использовать гем 'act_as_taggable' из этой темы -> потоковый обмен сообщениями Rails в? Если да, то как база данных узнает, что она должна выбрать всех этих пользователей в определенном объекте диалога.

class Conversation < ActiveRecord::Base
 #columns -> :subject, :users_id

  has_many :messages
  has_many :participants
  has_many :users, :through => :participants
end



class Message < ActiveRecord::Base
 #columns -> :conversation_id, :sender_id, :read

  belongs_to :conversation
end

class Participant < ActiveRecord::Base
 #columns -> :user_id, :conversation_id

  belongs_to :conversation
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :conversations
  has_many :participants
end

person Woody008    schedule 05.04.2015    source источник


Ответы (1)


Таблица conversations не должна не иметь столбец user_id/users_id, так как в этом случае вы установили отношение "многие ко многим".

Вы можете добавить пользователей в беседу, выполнив что-то вроде:

@conversation.users << @user
@conversation.save

Или в форме это будет что-то вроде:

<%= form_for Conversation.new do |f| %>
  <%= f.collection_select :user_ids, User.all, :id, :name, {prompt: true}, {multiple: true} %>
  <%= f.submit %>
<% end %>

Вы можете вовлечь пользователей в беседу с @conversion.users.

Кроме того, ваша пользовательская модель должна быть:

class User < ActiveRecord::Base
  has_many :participants
  has_many :conversations, through: :participants
end
person Chris Edwards    schedule 02.09.2015