Как я могу использовать области с Ransack в Rails 3?
-
26-10-2019 - |
Вопрос
В моей модели виджетов у меня есть следующее:
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
}
В идеале я хотел бы использовать эту область в качестве фильтра для результатов поиска Ransack, поэтому у меня есть в контроллере:
def index
@q = Widget.accessible_to(current_user).search(params[:q])
@widgets = @q.result.order('created_at DESC')
end
Это генерирует следующую ошибку:
Неопределенный метод «Поиск» для массива: 0x007ff9b87a0300
Я предполагаю, что Ransack ищет объект отношения Activerecord, а не массив. Есть ли в любом случае, что я могу использовать свою область в качестве фильтра для Ransack?
Решение
Изменить self.all
за self.scoped
. all
возвращает массив.
Обновление для рельсов 4: all
Теперь вернет сферу.
Не связан с StackOverflow