Question

J'utilise le sort_link de Ransack dans mon projet Rails pour afficher une liste des frais pour mon paiement modèle.Cependant, 'fee_amount' n'est pas un attribut du paiement modèle, mais plutôt une méthode de classe du facture modèle (qui appartient au paiement).Ce que j'ai actuellement c'est :

<%= sort_link @search, :bill_fee_amount, "Frais de commodité" %>

qui devrait accéder au facture du courant paiement et appelez la méthode 'fee_amount' à ce sujet facture, qui effectue quelques calculs et renvoie un float.Ce sont ces flotteurs que j'espère rechercher.

Cela peut-il être fait ou puis-je trier uniquement par attributs du modèle avec lequel je travaille ?

Était-ce utile?

La solution

Ransack est le successeur de MetaSearch et, selon la documentation MetaSearch, vous pouvez créer des recherches personnalisées.Voici le lien:

https://github.com/ernie/meta_search

Je pense que quelque chose comme ceci fonctionnerait :

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')

La question n'était pas claire sur le calcul exact, j'ai donc supposé qu'il s'agissait simplement de la somme d'un champ appelé fee_amount.Malheureusement, c'est probablement bien pire que cela et je pense que le méchant calcul SQL devra être inclus dans le Payment modèle.

Le point clé, je pense, est que le SQL doit inclure la colonne sur laquelle vous effectuez le tri, vous devez donc demander au SQL de la calculer et de l'inclure avec le nom sur lequel Ransack souhaite effectuer la recherche.

J'espère que cela aide.

Autres conseils

Vous ne pouvez pas avec ransack car il vient, mais vérifier Ce numéro .Il semble que certaines personnes ont fait des patchs pour cette fonctionnalité, mais je ne les ai pas essayées.

Ransack , en interne, il utilise toujours le modèle tel que défini dans la base de données et je ne pouvais pasFaites-le utiliser les tables temporaires créées par les champs.

PD: retravaillé le commentaire comme une réponse que je reviens toujours à cette question: p

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top