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

时间:2016-06-17 10:24:49

标签: sql ruby-on-rails postgresql activerecord ruby-on-rails-5

关于my last attempted answer,我可以实现我想要的目标。一旦应用程序正常工作,我发现有些不同之处:只有创建消息并发送消息的人才会显示。如果我回复,我没有看到答复,我知道问题。

我的消息模型包含表格:[: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)的身份都是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) *')

1 个答案:

答案 0 :(得分:2)

由于您使用的是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) *')