Wie kann ich Scopes mit Ransack in Rails 3 verwenden?
-
26-10-2019 - |
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?
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