一尘不染

显示消息数组中的最后一条消息

sql

我的 消息 模型具有表:[:id, :user_id, :to, :body, ...]

:user_idfrom用于确定消息创建者的方法类似。

User 1将是客户,User 2是学生。学生向客户发送一条消息。只有我的客户端代码是这样的:

#Controller Index:

@messages = Message.where(to: current_user.id) # My replies are not included here
       .order(user_id: :asc, created_at: :desc)
       .select('distinct on (user_id) *')

我是说给我发送给我(:to)的ID为的所有消息1

由于此:to列,我看不到我的回复。

我的(客户)回复看起来像这样:

to: #student id
user_id: #client id

和学生留言:

to: #client id
user_id: #student id

因此,因为to现在指向一个ID,所以说2我看不到答复。我可能需要更改模型,但是如果您发现简单的方法,请告诉我。

编辑:

效果很好的答案:

@messages = Message.where(to: current_user.id).or(Message.where(user_id: current_user.id))
                 .order(connection: :desc, created_at: :desc)
                 .select('distinct on (connection) *')

阅读 193

收藏
2021-05-30

共1个答案

一尘不染

由于您使用的是Rails 5,因此可以利用它的or方法:

Message.where(to: current_user.id).or(
 Message.where(user_id: current_user.id)
).order(connection: :desc, created_at: :desc)
 .select('distinct on (connection) *')
2021-05-30