0

你好,我是 Rails 新手

我有一个名为 'messages' 的表,其中包含 current_user__id 、 to_user_id 和 created time 列

我正在尝试构建一个聊天应用程序,其中不同的用户可以单独聊天,并且这些消息将使用各自的 ID 存储在消息表中。

现在为了在屏幕上打印消息。

我面临问题

我需要一个查询,以便 current_user__id 和 to_user_id 对话以及 to_user_id 和 current_user__id 对话都将按最新创建时间列出。

4

1 回答 1

1

我将假设您有两个 ActiveModel:用户和消息。确保你有这样的类:

class User < ApplicationRecord
  has_many :messages
end

class Message < ApplicationRecord
  belongs_to :current_user, class_name: 'User', foreign_key: 'current_user_id'
  belongs_to :to_user, class_name: 'User', foreign_key: 'to_user_id'
end

当您添加t.timestamps到迁移中时,它会为您创建created_atupdated_at字段,这是一个小琐事。

现在我将为您硬编码原始 sql 查询:

  def get_messages(current_user_id, to_user_id)
    @messages = Message.where(' current_user_id=? OR receiver_user_id=? OR current_user_id=? OR receiver_user_id=? ', 
                current_user_id, current_user_id, to_user_id, to_user_id).order('created_at DESC')
  end

order('created_at DESC')如果您只想按升序排列,您可以按顺序播放,您可以将 DESC 替换为 ASC 或order(:created_at)

您可以设置任何其他查询条件,例如不显示已删除的消息等。您可以从官方 Ruby on Rails 文档中了解更多关于Active Record 查询接口的信息。

于 2021-01-07T15:26:00.510 回答