Come posso utilizzare gli ambiti con Ransack in Rails 3?
-
26-10-2019 - |
Domanda
Nel mio modello Widget ho il seguente:
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, vorrei utilizzare questo ambito come un filtro per i risultati di ricerca di Ransack, così nel mio controller ho:
def index
@q = Widget.accessible_to(current_user).search(params[:q])
@widgets = @q.result.order('created_at DESC')
end
In questo modo si genera l'errore seguente:
metodo non definito `search' per Array: 0x007ff9b87a0300
Sto indovinando che Ransack è alla ricerca di un oggetto relazione ActiveRecord e non un array. C'è comunque che posso utilizzare il mio scopo come filtro per Ransack?
Soluzione
Cambia la self.all
per self.scoped
. all
restituisce un array.
Aggiornamento per Rails 4:. all
tornerà ora una portata ??p>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow