1

Beitrag Modellsortiert basierend auf entsprechenden Punkten in rails4

has_many :votes 

Vote Modell

belongs-to :post 

Ich brauche alle Beiträge von Beiträgen Tisch zu holen und anzuzeigen. Aber die Einträge sollten in ASC/DESC (params [: order]) ihrer Stimmen sortiert sein. Wenn alle Beiträge einen Abstimmungs-Tabelleneintrag haben, dann funktioniert dieser Code perfekt.

Ich habe eine Abfrage wie folgt:

@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]}") 

aber, wenn überhaupt keine Post Stimmen Tabelleneintrag haben, dann die Beiträge nicht stimmten die Liste macht falsche Sortierung angezeigt. Wenn keine Stimmen zu einigen Posts, und wenn die Sortierreihenfolge ist ASC, dann müssen die nicht gewählten Beiträge zuerst in der Liste erscheinen, und , wenn die Sortierreihenfolge ist DESC, müssen dann die nicht gewählten Beiträge zuletzt in der erscheinen Liste. Bitte helfen Sie.

Dank

Antwort

1

Ursache nicht alle Ihrer Beiträge haben Stimmen dann nach ein paar Platten beitreten votes.point Wert als NULL haben. NULL s sind spezifische Werte, die separat behandelt werden sollten und Probleme mit absteigender Sortierung verursachen können, da sie in PostgreSql in aufsteigender Reihenfolge sortiert sind. Um Aufzeichnungen zu haben, mit NULL Stimmen sortiert richtig würde ich NULL Werte auf 0.

SUM(COALESCE(votes.point, 0)) 

zu zwingen vorschlagen Danach werden alle Beiträge, die Stimmen nicht haben total_point Wert gleich 0 haben, die eine regelmäßige Zahl ist, die kann wie gewünscht bestellt werden.

Alternativ bietet PostgreSql zusätzliche Syntax für die Angabe, wie NULL Werte mit ORDER BY Klausel sortiert werden sollen. https://www.postgresql.org/docs/9.0/static/sql-select.html#SQL-ORDERBY Beispiel:

ORDER BY somevalue DESC NULLS LAST 
Verwandte Themen