发布模型
has_many :votes
投票模型
belongs-to :post
我需要从帖子表中获取所有帖子并显示。但是条目应该在其投票的ASC / DESC(params [:order])中排序。如果所有帖子都有投票表条目,则下面的代码可以完美运行。
我的查询如下:
@posts = Post.joins('LEFT OUTER JOIN votes ON votes.post_id = posts.id').select('posts.*, SUM(votes.point) AS total_point').group('posts.id').order("total_point #{params[:order]}")
但是,如果任何帖子没有投票表条目,那么未投票的帖子会使列表排序显示错误。如果对某些帖子没有投票,并且排序顺序是ASC,则需要首先在列表中显示未投票的帖子,并且 如果排序顺序是DESC,那么需要在列表中最后显示未投票的帖子。请帮忙。
由于
答案 0 :(得分:2)
因为并非所有帖子都有投票,因此在加入某些记录后,{
值为}
。 votes.point
是特定值,应单独处理,并可能导致降序排序问题,因为它们在PostgreSql中按默认升序排序。为了使NULL
票的记录正确排序,我建议将NULL
值强制为0。
NULL
之后所有没有投票的帖子都会有NULL
值等于0,这是一个可以按照你想要的顺序排列的常规号码。
或者,PostgreSql具有额外的语法,用于指定SUM(COALESCE(votes.point, 0))
值应如何使用total_point
子句进行排序。
https://www.postgresql.org/docs/9.0/static/sql-select.html#SQL-ORDERBY
例如:
NULL