Ad esempio, ho un evento con start_date
e length
(come numero intero che rappresenta giorni).Rails & Ransack - Ordinamento/ricerca basato su una definizione nel modello
Nel modello definisco end_date
come start_date + length.days
molto semplice come ci si aspetterebbe:
def end_date
start_date + length.days
end
Tutto funziona bene nel modello, posso usare event.end_date
per visualizzare la data di inizio più però lunghezza molti giorni è stato impostato su , tuttavia, desidero ordinare gli eventi entro la data di fine utilizzando Ransack.
Il collegamento di ordinamento per start_date
assomiglia a questo: <%= sort_link @q, :start_date, "Start" %>
Se provo lo stesso per END_DATE (<%= sort_link @q, :end_date, "End" %>
) purtroppo in silenzio non riesce, come presumo che sta cercando end_date
come una colonna nella tabella e non trovandola.
Sono semplicemente stupido o sto cercando di fare qualcosa che Ransack semplicemente non è stato creato?
sembra che il ransack traduca i parametri di ricerca in query sull'ORM ActiveRecord - che fallirebbe sicuramente a meno che non si disponga di una colonna reale su cui il DB sottostante può cercare. – bdares
Grazie per il commento @bdares. Ora sono riuscito a impostare 'ransacker: end do | r |' nel modello a questo: 'Arel :: Nodes :: SqlLiteral.new (" DATE_ADD (events.start_date, INTERVAL events.length DAY) ")'. Che produce la query: "SELECT DISTINCT events. * FROM events ORDER BY DATE_ADD (events.start_date, INTERVAL events.length DAY) DESC LIMIT 30 OFFSET 0'. Funziona, ma si sente orribilmente "hacky". – bensmithbwd
@bensmithbwd - È difficile vedere la soluzione completa nel tuo commento. Abbi cura di scrivere un esempio completo in modo che possiamo ottenere una migliore comprensione della soluzione. Quindi puoi accettare la tua risposta. –