【问题标题】:Grouping messages to show latest in overview分组消息以在概览中显示最新消息
【发布时间】:2011-04-05 10:19:06
【问题描述】:

我正在尝试在我的 rails 3 应用程序中以有组织的方式显示消息。我正在尝试按列表 ID 对消息进行分组,并显示该会话中属于该列表的最新消息。

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

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

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

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

【问题讨论】:

  • 显示 SQL 表的 DLL 可能会有所帮助。你有一个created_at 字段,我假设它是在将一行添加到表中时设置的。您能否定义您所说的“最后一条消息”和“最旧的消息”是什么意思 - 如果您按 created_at 字段排序,它们似乎是同一回事。

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


【解决方案1】:

使用 ActiveRecord 时要熟悉的最重要的事情是查看输出日志。如果您在 localhost 之外运行您的应用程序,由 rails server 启动,那么您应该会看到所有 SQL 输出到您的控制台。

我说“检查您的 SQL”是因为您的方法不太合理。如果您只想选择一个特定的对话并检索其最后一条消息,那么您应该执行以下操作:

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

如果您尝试为每个 Listing 获取最后一个 Message,那么您需要从不同的角度工作,如下所示:

@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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多