如何建立多参与者会话系统的模型

时间:2014-08-21 20:41:15

标签: ruby-on-rails ruby message rails-activerecord

我是Rails(和编程)的新手,经过一些教程后,我正在设计一个消息传递应用来测试我的技能。

我正在建模的情况是用户可以向2个以上的其他用户发送消息。这是我想出来的

  • 会话中有许多参与者(用户)和许多消息 (消息)。
  • 用户有很多会话和许多消息。
  • 邮件属于用户(发件人+收件人)并属于对话。

然后是ActiveRecord模型:

class User < ActiveRecord::Base
  has_many :messages, :through :conversation
  has_many :conversations # or is belongs_to :conversation 
end

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

class Conversation < ActiveRecord::Base
  has_many :messages
  belongs_to :user # or is it has_many :users
end

或者我是否必须添加第4个接口收件箱

class Inbox < ActiveRecord::Base
  belongs_to :user
  has_many :conversations
end

我会将用户和会话模型更改为

class User < ActiveRecord::Base
  has_one :inbox
  has_many :conversations, :through :inbox
  has_many :messages, :through :conversation
end

class Conversation < ActiveRecord::Base
  belongs_to :inbox
  has_many :messages
  belongs_to :users
end

第二个选项看起来多余。 所以是的,我对谈话和用户之间的关系/关联模糊不清。非常感谢所有启发我的投入。

1 个答案:

答案 0 :(得分:0)

我认为你的第一种方式更好,但看起来应该是这样的:

class User < ActiveRecord::Base
  has_many :messages
  has_many :user_conversations
  has_many :conversations, through: :user_conversations
end

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

class Conversation < ActiveRecord::Base
  has_many :messages
  has_many :user_conversations
  has_many :users, through: :user_conversations
end

# join table between users and conversations
class UserConversation < ActiveRecord::Base
  belongs_to :user
  belongs_to :conversation
end

原因是用户可以进行多次对话,而对话可以有很多用户。您需要创建连接表UserConversation以适应这种情况。

此外,找出哪个模型应该属于另一个模型的最简单方法是询问哪个模型应该具有另一个模型的外键。外键belongs_to是另一个模型。