2016-10-28 3 views
1

Ich habe die folgenden tables/models in meinem Helpdesk-Modul.Rails Gruppe nach Fremdschlüssel mit benutzerdefinierten Regeln

status.rb

has_many :tickets 

Status-Tabelle

id   name 
---------------------- 
1   New 
2   Assigned 
3   In progress 
4   Finished 
5   Closed 
6   Cancelled 

ticket.rb

belongs_to :status 

Tickets Tisch

id status_id subject customer_id 
---------------------------------------- 
1  1   Ticket 1 1 
2  1   Ticket 2 1 
3  2   Ticket 3 1 
4  3   Ticket 4 1 
5  4   Ticket 5 1 
6  3   Ticket 6 1 
7  1   Ticket 7 1 
8  2   Ticket 8 1 

Für Helpdesk-Team, ich brauche Tickets nach Status zählen zu zeigen.

Dies würde für sie arbeitet,

Ticket.all.joins(:status).group("statuses.name").count 
=> {"New" => 3, "Assigned" => 2, "In progress" => 2, "Finished" => 1} 

Das Problem ist jetzt, ich Assigned und In progress als einzelne Gruppe zeigen will, Active, an den Kunden.

Das Ergebnis wie dieses

=> {"New" => 3, "Active" => 4, "Finished" => 1} 

Wie kann aussehen soll ich dieses Ergebnis mit bekommen?

+3

Ich schlage vor, es nicht in SQL zu tun, müssen nur eine Methode, die erste Hash endgültige Hash umwandelt. – MikDiet

+0

'status_frequencies.except ('Zugewiesen', 'In Bearbeitung') Zusammenführen ('Aktiv' => Status_Frequenz ['Zugewiesen'] + Status_Frequenz ['In Bearbeitung'])' – ndn

+0

Ich stimme @MikDiet zu. Das Hinzufügen dieser Logik in SQL wird es schwierig machen, unordentlich zu werden und für zukünftige Wartung anfällig zu sein. Es wird in Rubin-Methode eine einfache Lösung sein! –

Antwort

0
  1. Sie brauchen nicht
  2. nun die .all Methode aufzurufen, die wirkliche Lösung, ist ein Hack-ish Art und Weise, aber es funktioniert und getestet wird.
    # my_var is the variable in which you fetch the records
    my_var['Assigned'] += my_var['In progress']
    my_var['Active'] = my_var.delete 'Assigned'
    my_var.delete 'In progress'
Verwandte Themen