Frage

In meinem Widget -Modell habe ich Folgendes:

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
}

Im Idealfall möchte ich diesen Bereich als Filter für Ransacks Suchergebnisse verwenden. In meinem Controller habe ich also:

def index
  @q = Widget.accessible_to(current_user).search(params[:q])
  @widgets = @q.result.order('created_at DESC')
end

Dies erzeugt den folgenden Fehler:

Undefinierte Methode "Suche" nach Array: 0x007ff9b87a0300

Ich vermute, Ransack sucht nach einem ActiveCord -Beziehungsobjekt und nicht nach einem Array. Gibt es sowieso, dass ich meinen Geltungsbereich als Filter für Ransack verwenden kann?

War es hilfreich?

Lösung

Ändere das self.all zum self.scoped. all Gibt ein Array zurück.

Update für Rails 4: all Wird jetzt einen Zielfernrohr zurückgeben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top