2012-10-01 5 views
6

Ich verwende Ransacks sort_link in meinem Projekt Schienen, um eine Liste der Gebühren für meine Zahlung Modell anzuzeigen. 'Fee_amount' ist jedoch kein Attribut der Zahlung Modell, sondern stattdessen eine Klassenmethode der Rechnung Modell (die zur Zahlung gehört). Was ich habe, zur Zeit ist:Verwenden Sie Ransack sort_link für Nicht-Attribute

<% = sort_link @search,: bill_fee_amount, "Convenience Fee" %>

die die Rechnung der aktuellen Zahlungszugriffe sollten und rufen Sie die 'fee_amount' Methode auf dieser Rechnung, die einige Berechnungen durchführt und einen Float zurückgibt. Es sind diese Floats, nach denen ich suche.

Kann dies geschehen, oder kann ich nur nach Attributen des Modells, mit dem ich es zu tun habe, sortieren?

Antwort

0

Ransack ist der Nachfolger von MetaSearch. Gemäß der MetaSearch-Dokumentation können Sie benutzerdefinierte Suchen erstellen. Hier ist der Link:

https://github.com/ernie/meta_search

Ich denke, so etwas wie dies funktionieren würde:

scope :sort_by_bill_fee_amount_asc, joins(:bill).select('sum("bills"."fee_amount") AS bill_fee_amount').order('bill_fee_amount ASC') 
scope :sort_by_bill_fee_amount_desc, joins(:bill).select('sum("bills"."fee_amount") AS bill_fee_amount').order('bill_fee_amount DESC') 

Die Frage war nicht klar, was die Berechnung ist genau so habe ich angenommen, es war nur eine Summe von a Feld genannt fee_amount. Leider ist es wahrscheinlich viel schlimmer als das und ich denke, dass die böse SQL-Berechnung im Payment Modell enthalten sein muss.

Der Schlüsselpunkt, den ich denke, ist, dass das SQL die Spalte enthalten muss, die Sie sortieren, also müssen Sie die SQL haben, es zu berechnen und es mit dem Namen einzuschließen, nach dem Ransack suchen möchte.

Ich hoffe, dass hilft.

+2

prüft dieses [Problem] (https://github.com/ernie/ransack/issues/61). Ransack hat nicht die gleiche Funktionalität wie meta_search. Intern verwendet es immer das Modell, wie es in der Datenbank definiert ist, und ich konnte nicht die von den Bereichen erstellten temporären Tabellen verwenden –

2

Sie können nicht mit ransack wie es kommt, aber überprüfen Sie . Es scheint, dass einige Leute Patches für diese Funktionalität erstellt haben, aber ich habe sie nicht ausprobiert.

Ransack intern verwendet es immer das Modell wie in der Datenbank definiert, und ich konnte nicht die von den Bereichen erstellten temporären Tabellen verwenden.

PD: Kommentar als Antwort überarbeitet, wie ich immer auf diese Frage zurückkommen: P