Вопрос

В моей модели виджетов у меня есть следующее:

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 Теперь вернет сферу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top