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?

¿Fue útil?

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
scroll top