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?

È stato utile?

Soluzione

Cambia la self.all per self.scoped. all restituisce un array.

Aggiornamento per Rails 4:. all tornerà ora una portata

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top