2012-02-04 76 views
2

我正在設計Active Admin gem中的基本文件管理器(資產模型)。每個資產HABTM組,反之亦然。Ruby on Rails Active Admin - 顯示HABTM的重複記錄

在我active_admin資產資源我有一個過濾器,我希望能夠 選擇多個組進行過濾,所以我說:

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

所有組顯示爲複選框預期。但是,如果我有asset_1,asset_2和group_1分配給asset_1和asset_2,並且group_2分配給asset_2,則當I 按兩種角色過濾時,asset_2會自行列出兩次。

如何限制過濾器僅使用「獨特」或「獨特」資產進行返回?

我還有另外一個問題,就是過濾器在我的任何範圍內都不起作用。

回答

2

has_and_belongs_to_many接受:uniq選項,確保只返回uniq記錄。在你的模型中設置這個應該可以做到。

class MyModel 
    has_and_belongs_to_many :things, :uniq => true 
end 
+0

只是給了一個漩渦,並重新啓動服務器導軌,仍然有同樣的問題。我爲Asset和Group模型添加了:uniq選項。 – professormeowingtons 2012-02-04 02:00:51

+0

我不是故意指責,因爲這很有可能我在這裏做了一些愚蠢的簡單錯誤,但是這幾乎就像是ActiveAdmin中的一個錯誤?即使我只有1個資產,如果我將其分配給2個組,然後在過濾器側欄中勾選這些2+組的複選框,則1個資產將顯示2次以上。 請參閱:http://i.imgur.com/GbntK.png – professormeowingtons 2012-02-04 05:25:03

+0

是的,我認爲這是與Active Admin中的HABTM關係有關的一個錯誤。該複選框在URL中追加查詢字符串參數'&q [groups_id_in] [] = 1&q [groups_id_in] [] = 2'。這似乎強制Assets.where(:group_id => 1)和Assets.where(:group_id => 2),因此多次返回相同的條目。 – professormeowingtons 2012-02-04 05:58:50

4

活動管理員讀取指示添加

distinct: true 

獲得獨特的效果。

要應用到主動管理,我使用的是這樣做是這樣的:

controller do 
    def apply_filtering(chain) 
    @search = chain.ransack clean_search_params params[:q] 
    @search.result(distinct: true) 
    end 
end 
+0

感謝您的回答,雖然我不認爲這個功能在2012年存在,當我問這個問題:( – professormeowingtons 2015-10-27 17:16:00

+0

無後顧之憂,我把這裏部分地放在我自己的參考文獻中,一定會經常提到。 – Will 2015-10-27 18:07:56

+1

最新版本ActiveAdmin從'clean_search_params'方法中刪除了參數,所以現在應該讀取'@search = chain.ransack clean_search_params' – 2016-04-18 06:39:43