将消息分组以显示最新概述

时间:2011-04-05 10:19:07

标签: sql ruby-on-rails ruby activerecord group-by

我正试图在我的rails 3 app中以有条理的方式显示消息。我正在尝试按列表ID对邮件进行分组,并在该对话中显示属于该列表的最新邮件。

我正在我的控制器中尝试这种语法:

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

这通过列表成功地将我的消息组合在一起,但是它不显示该组中的最后一条消息。它显示了最古老的一个。

有谁知道如何做到这一点?我尝试过使用:having子句,但到目前为止无济于事。

1 个答案:

答案 0 :(得分:2)

使用ActiveRecord时最熟悉的是观察输出日志。如果您正在通过rails server启动localhost运行您的应用程序,那么您应该看到所有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