filter activeadmin ransack

filter - Filtro personalizado en los rieles ActiveAdmin usando el saqueo



ransack (0)

Creé un filtro activeadmin que tiene las siguientes opciones para filtrar los datos de la tabla en su menú desplegable.

Elección A

Opción B

Opción C

Elección D

Quiero agregar una quinta opción F que elegiría B o C (es decir, los resultados de B y C).

Elección A

Opción B

Opción C

Elección D

Elección F = B o C

Las opciones se almacenan en una tabla llamada Cupones en su campo de título (creé una fila que tiene la opción F). Hasta ahora, traté de emplear un saqueo para hacer el truco, sin estar muy seguro.

//app/admin/user.rb filter :has_right_choice, label: ''Filter by the right choice'', collection: Coupon.all, as: :select //app/models/user.rb ransacker :has_right_choice, :formatter => ->(title) { if (title == ''Choice F'') Coupon.all.where("title = ''Choice B'' OR title = ''Choice C''") else Coupon.all end } do |parent| parent.table[:id] end

Pero mi solución no funciona. ¿Hay un mejor enfoque en lugar de un saqueo? Si no, ¿alguna sugerencia?

=============================================== ===================== EDITAR: solución

La opción A # permite decir que esta opción tiene id = 1 en la tabla de cupones

Elección B # id = 2

Elección C # id = 3

Choice D # id = 4

Elección F # id = 5

También digamos que la tabla de Usuarios tiene un campo choice_id que se refiere a la tabla de Opciones. Modificamos el código defectuoso de la siguiente manera:

//app/admin/user.rb filter :choice_id_in, label: ''Filter by the right choice'', collection: Coupon.all, as: :select //app/models/user.rb ransacker :choice_id, :formatter => -> (coupon_id) { if (coupon_id == "5") ids = User.all.where("choice_id = 3 OR choice_id = 4").map(&:id) else ids = User.where("choice_id = ?", coupon_id).map(&:id) end (ids.empty?) ? ids << 0: ids #activeadmin translates the queries into IN operator, may get syntax error if empty # id = 0 is non-existent in Users as id >= 1 ids #maybe is not needed } do |parent| parent.table[:id] end

Sugerencias para mejorar son bienvenidas. Gracias @berker por la guía.