Ruby on Rails Active Admin - дубликаты записей для HABTM - PullRequest
3 голосов
/ 04 февраля 2012

Я разрабатываю базовый файловый менеджер (модель активов) в геме Active Admin. Каждая группа активов HABTM и наоборот.

В моем ресурсе active_admin Asset у меня есть фильтр, где я хочу иметь возможность выберите несколько групп для фильтрации, поэтому я добавил:

filter :groups_id, :as => :check_boxes, :collection => proc {Group.all}

Все группы отображаются в виде флажков, как и ожидалось. Однако, если у меня есть asset_1, asset_2 и group_1, назначенные для asset_1 и asset_2, и group_2 для asset_2, когда я фильтр по обеим ролям, asset_2 перечисляет себя дважды.

Как я могу ограничить фильтр для использования только "отдельных" или "уникальных" активов, которые должны быть возвращены?

У меня также есть другая проблема, которая заключается в том, что фильтры не работают вообще ни в одной из моих областей.

Ответы [ 3 ]

4 голосов
/ 27 октября 2015

Активное чтение администратора указывает на добавление

distinct: true 

для получения уникальных результатов.

Чтобы применить это к активному администратору, я использую это следующим образом:

controller do
  def apply_filtering(chain)
     @search = chain.ransack clean_search_params params[:q]
     @search.result(distinct: true)
   end
end
2 голосов
/ 25 июня 2018

Быстрое обновление ответа Уилла. Я использую Rails 5.0 и ActiveAdmin 1.0, а clean_search_params вернул ошибку. Но вместо этого это сработало:

def apply_filtering(chain)
  super
  @search.result(distinct: true)
end

Спасибо!

2 голосов
/ 04 февраля 2012

has_and_belongs_to_many принимает параметр :uniq, который гарантирует, что будут возвращены только уникальные записи.Установка этого в вашей модели должна помочь.

class MyModel
  has_and_belongs_to_many :things, :uniq => true
end
...