我正试图在我的rails 3 app中以有条理的方式显示消息。我正在尝试按列表ID对邮件进行分组,并在该对话中显示属于该列表的最新邮件。
我正在我的控制器中尝试这种语法:
@messages = Message.all(:conditions => { :recipient_id => current_user.id },
:group => :listing_id,
:order => "created_at DESC")
这通过列表成功地将我的消息组合在一起,但是它不显示该组中的最后一条消息。它显示了最古老的一个。
有谁知道如何做到这一点?我尝试过使用:having子句,但到目前为止无济于事。
答案 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