0

所以我试图在我的应用程序中实现一个消息系统,我无意使用任何 gem。我见过其中的大多数,并且我能够使用它们。但是为了学习,我想了解它是如何工作的,并从头开始构建一个,并且能够按照我的意愿定制它。

我四处寻找教程,但没有任何教程或任何具体信息,除了;这个 -> http://.novawave.net/public/rails_messaging_tutorial.html,但不幸的是链接已关闭或这个 -> Rails 线程私人消息传递,但我仍然无法解决所有问题。

所以希望这个帖子可以作为其他人的参考。

所以基于这个线程 Rails 线程私人消息传递,这就是我所拥有的,包括列定义。但是我在思考在对话中添加多个用户的逻辑时遇到了问题。我看到这个的方式:

  1. 点击发送消息,将触发一个新的对话对象
  2. 添加一个主题,然后选择我想要在对话中使用的用户 <-- 这就是阴天的地方
  3. 在没有任何ajax的相同表单的底部,我想我可以呈现将提交文本的消息表单?

好的,那么如何在会话表 users_id 列中放置多个用户 ID?有一个建议在这个线程中使用'act_as_taggable' gem -> 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
4

1 回答 1

0

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
于 2015-09-02T12:56:41.557 回答