2016-06-17 120 views
2

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

消息模型表:[:id, :user_id, :to, :body, ...]

:user_id,它是用于确定谁创建的消息将类似于from

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一个ID的所有消息。

由于: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) *') 

回答

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) *') 
+0

越来越'语法错误,意外')'' – Sylar

+0

是的,你的代码给了我最后的回复,在控制台中,但打破了我的帖子中的代码,这是链接中的答案。 – Sylar

+0

我已经将'.or()'添加到了我现有的代码中,就是这样。谢谢! – Sylar