我有两个模型,发布和评论。帖子有很多评论和评论属于帖子。
我正在尝试做的是获得按创建日期排序的帖子列表,除非它有评论。然后需要获取最新评论的创建日期。
现在我知道我可以包含这样的协会:
Post.find(:all, :include => [:comments], :order => "comments.created_at DESC, posts.created_at DESC")
但是这将首先订阅所有帖子,然后是没有评论的帖子。我不希望任何一个单独订购,而是合并。
该解决方案还需要与pa_ate gem一样兼容,如will_paginate。
修改
我现在使用以下代码:
posts_controller.rb
@posts = Post.order('updated_at DESC').page(params[:page]).per_page(10)
comments_controller.rb
@post = Post.find(params[:post_id])
@post.update_attributes!(:updated_at => Time.now)
答案 0 :(得分:2)
我建议:
将last_commented_at日期字段添加到Post模型。每当有人评论帖子更新该字段时。它会对您的数据库结构进行一些规范化,但您的查询会更快,更直接。
答案 1 :(得分:1)
<强>的Postgres 强>
Post.paginate(:include => [:comments],
:order => "COALESCE(comments.created_at, posts.created_at)",
:page => 1, :per_page => 10)
<强>的MySQL 强>
Post.paginate(:include => [:comments],
:order => "IFNULL(comments.created_at, posts.created_at)",
:page => 1, :per_page => 10)