¿Cómo puedo usar Scopes con Ransack en Rails 3?
-
26-10-2019 - |
Pregunta
En mi modelo de widget tengo lo siguiente:
scope :accessible_to, lambda { |user|
if user.has_role?('admin')
self.all
else
roles = user.roles
role_ids = []
roles.each { |r| role_ids << r.id }
self.joins(:widget_assignments).where('widget_assignments.role_id' => role_ids)
end
}
Idealmente, me gustaría usar este alcance como filtro para los resultados de búsqueda de Ransack, por lo que en mi controlador tengo:
def index
@q = Widget.accessible_to(current_user).search(params[:q])
@widgets = @q.result.order('created_at DESC')
end
Hacer esto genera el siguiente error:
Método indefinido `búsqueda 'para la matriz: 0x007ff9b87a0300
Supongo que Ransack está buscando un objeto de relación Activerecord y no una matriz. ¿Hay de todos modos que pueda usar mi alcance como filtro para el shitack?
Solución
Cambiar el self.all
por self.scoped
. all
Devuelve una matriz.
Actualización de Rails 4: all
ahora devolverá un alcance.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow