2011-04-05 51 views
1

我試圖在我的rails 3應用程序中以有組織的方式顯示消息。我試圖通過列表ID對消息進行分組,並顯示屬於該列表的對話中的最新消息。通過列出將消息分組以顯示最新的概述

@messages = Message.all(:conditions => { :recipient_id => current_user.id }, 
         :group => :listing_id, 
         :order => "created_at DESC") 

這成功地組合在一起我的消息,但它並不表明組中的最後一條消息:

我想這句法在我的控制器。它顯示最古老的一個。

有誰知道如何做到這一點?我嘗試過使用:having子句,但目前爲止無濟於事。

+1

它可能有助於顯示SQL表的DLL。你有一個'created_at'字段,當我將一行添加到表中時,我假設它是設置的。你可以定義你說的「最後一條消息」和「最早的消息」的含義 - 如果你是通過'created_at'字段進行排序的話,它們看起來是一樣的。 – Tony 2011-04-05 10:22:51

回答

2

使用ActiveRecord時最重要的一點就是看你的輸出日誌。如果你正在從本地主機運行你的應用程序,啓動rails server,那麼你應該看到輸出到你的控制檯的所有SQL。

我說'檢查你的SQL',因爲你的方法不太合理。如果你希望只選擇特定的會話和檢索它的最後消息,那麼你應該做這樣的事情:

@messages = Message.all(:conditions => 
         { :recipient_id => current_user.id, 
         :listing_id => params[:listing_id] }, 
         :order => "created_at DESC") 

如果你想獲得最後Message每個Listing,那麼你需要從工作一個不同的視角,如下所示:

@listings = Listings.all(:conditions => {:recipient_id => current_user.id}, 
         :include => :messages, 
         :order => 'messages.created_at DESC') 

last_messages_of_first_listing = @listings.first.messages.first