Reihenfolge kann jeder SQL-Code sein. Sie können eine CASE
-Anweisung verwenden, um Ihre Werte Werten zuzuordnen, die natürlich in der richtigen Reihenfolge sortiert sind.
Assignment.order("
CASE
WHEN priority = 'best' THEN '1'
WHEN priority = 'good' THEN '2'
WHEN priority = 'bad' THEN '3'
END")
Noch besser ist, können Sie diese Logik auf das Modell bewegen, so dass es einfacher ist, von Controllern zu nennen:
class Assignment < ActiveRecord::Base
...
def self.priority_order
order("
CASE
WHEN priority = 'best' THEN '1'
WHEN priority = 'good' THEN '2'
WHEN priority = 'bad' THEN '3'
END")
end
end
Dann können Sie einfach Assignment.priority_order
rufen Sie Ihre sortierten Datensätze zu erhalten.
Wenn diese Spalte in der Ansicht sortierbar ist, einen Parameter der Methode zur Richtung hinzufügen:
def self.priority_order(direction = "ASC")
# Prevent injection by making sure the direction is either ASC or DESC
direction = "ASC" unless direction.upcase.match(/\ADESC\Z/)
order("
CASE
WHEN priority = 'best' THEN '1'
WHEN priority = 'good' THEN '2'
WHEN priority = 'bad' THEN '3'
END #{direction}")
end
Dann Sie Assignment.priority_order(params[:direction])
von der Steuerung in der Sortieranlage passieren nennen würden.
danke das funktioniert – sonnyhe2002