我在字符之间设置了一个消息系统,如下所示。每个字符has_many :conversations
包含其他字符through: :chat_groups
。我期待相当标准的设置。
character.rb
has_many :chat_groups, class_name: "Chat",
foreign_key: "character_id",
dependent: :destroy
has_many :conversations, through: :chat_groups, source: :conversation
has_many :messages, as: :messageable
conversation.rb
has_many :chat_participants, class_name: "Chat",
foreign_key: "conversation_id",
dependent: :destroy
has_many :characters, through: :chat_participants, source: :character
has_many :messages, as: :messageable
chat.rb
belongs_to :character
belongs_to :conversation
message.rb
belongs_to :messageable, polymorphic: true
当一个字符(@sender
)向另一个字符(@recipient
)发送消息时,我首先需要检查两个字符之间的对话是否已经存在,如果没有,则创建这样的对话一个对话。涉及两个角色和其他角色(群聊)的对话可能已经存在,这应该被拒绝。
类似于Conversation.has(@sender).and_has(@recipient).and(has_no_more_characters)
。
我的问题是,查询是否存在此类对话的最佳/最有效方式是什么?