Rails通过has_many关联选择具有特定记录的记录

时间:2015-10-15 14:25:24

标签: ruby-on-rails activerecord

我在字符之间设置了一个消息系统,如下所示。每个字符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)

我的问题是,查询是否存在此类对话的最佳/最有效方式是什么?

0 个答案:

没有答案