2012-10-01 22 views
6

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

<% = @search sort_link,: bill_fee_amount, "Costes de Gestión" %>

que debe accede a la cuenta de de la corriente del pago y llamar a la El método 'fee_amount' en esa factura , que hace algunos cálculos y devuelve un flotante. Son estas carrozas con las que espero buscar.

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

Respuesta

0

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 cuestión no estaba claro acerca de lo que el cálculo es exactamente así que supuse que era sólo una suma de una campo llamado fee_amount. Desafortunadamente, es probablemente mucho peor que eso y creo que el desagradable cálculo de SQL tendrá que incluirse en el modelo Payment.

El punto clave, creo, es que el SQL necesita incluir la columna que está ordenando, por lo que necesita que el SQL lo calcule e incluirlo con el nombre que Ransack desea buscar.

Espero que ayude.

+2

Marque esta [tema] (https://github.com/ernie/ransack/issues/61). Ransack no tiene la misma funcionalidad que meta_search. Internamente, siempre está usando el modelo como se define en la base de datos, y no pude hacer que use las tablas temporales creadas por los ámbitos –

2

Usted no puede con el saqueo ya que viene, pero verifique this issue. Parece que algunas personas han hecho parches para esta funcionalidad, pero no los he probado.

Ransack, internamente, siempre está utilizando el modelo como se define en la base de datos, y no pude hacer que use las tablas temporales creadas por los ámbitos.

PD: reelaboró ​​el comentario como una respuesta como siempre vuelvo a esta pregunta: P

Cuestiones relacionadas