gpt4 book ai didi

ruby-on-rails - 对话中的最后一条消息以供预览

转载 作者:数据小太阳 更新时间:2023-10-29 08:57:07 24 4
gpt4 key购买 nike

我有一个 Conversation 模型,其中 has_many messages。我想提取用户的所有对话并向用户显示最后的 message 预览。我这样做如下:

Conversations_controller:

def index
@conversations = Conversation.includes(:messages)
.get_seller_conversations(@seller)
end

对话模型:

def self.get_seller_conversations(seller)
@conversations = seller.conversations
.includes(buyer: :user)
.joins(:messages)
.where(messages: { only_for_buyer: false })
.distinct
new.sorted_conversations(@conversations)
end


def sorted_conversations(conversations)
conversations.sort_by { |c| c.messages.last.created_at }
.reverse
end

index.json.jbuilder -> 查看

json.array!(@conversations.reject { |c| c.messages == [] }.map do |c|
x = c.messages.last
{ ...
...
preview: x.content ? x.content[0..100] : x.attachment_url }
end)

所以我必须将所有消息拉到这里来对对话进行排序并显示最后一条消息的预览。有没有一种方法可以只提取每次对话的最后一条消息,从而提高效率?

最佳答案

您可以在您的 Conversation 模型中将关系添加到它的最后一条消息:

has_one :last_message, -> { order(created_at: :desc) }, 来源::message

然后在您的搜索中,不是执行 Conversation.includes(:messages),而是执行 Conversation.includes(:last_message)

关于ruby-on-rails - 对话中的最后一条消息以供预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50030388/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com