Pregunta

Estoy usando sort_link de Ransack en mi proyecto Rails para mostrar una lista de tarifas para mi pago modelo.Sin embargo, 'fee_amount' no es un atributo del pago modelo, sino un método de clase del factura modelo (que pertenece al pago).Lo que tengo actualmente es:

<%= sort_link @search, :bill_fee_amount, "Tarifa de conveniencia" %>

que debe acceder a la factura de la corriente pago y llame al método 'fee_amount' en eso factura, que hace algunos cálculos y devuelve un flotante.Son estas carrozas las que espero buscar.

¿Se puede hacer esto o solo puedo ordenar por atributos del modelo con el que estoy tratando?

¿Fue útil?

Solución

Ransack es el sucesor de MetaSearch y, según la documentación de MetaSearch, puede crear búsquedas personalizadas.Aquí está el enlace:

https://github.com/ernie/meta_search

Creo que algo como esto funcionaría:

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 pregunta no estaba clara acerca de cuál es exactamente el cálculo, así que supuse que era solo la suma de un campo llamado fee_amount.Desafortunadamente, probablemente sea mucho peor que eso y creo que el desagradable cálculo de SQL deberá incluirse en el Payment modelo.

Creo que el punto clave es que el SQL debe incluir la columna que está ordenando, por lo que debe hacer que el SQL la calcule e incluya el nombre en el que Ransack quiere buscar.

Espero que eso ayude.

Otros consejos

No se puede con Ransack a medida que viene, pero comprobar este problema .Parece que algunas personas han hecho parches para esta funcionalidad, pero no las he probado.

Ransack , internamente, siempre está utilizando el modelo como se define en la base de datos, y no pudeHágalo usar las tablas temporales creadas por los ámbitos.

PD: Reelaboración El comentario como respuesta, ya que siempre vuelvo a esta pregunta: P

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top