2016-06-17 165 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