我想在自定义页面上使用活动管理员提供搜索小部件/过滤器功能,以提供查找功能。使用action_items我有自己的动作和表单来呈现搜索页面。在搜索页面上,我需要显示的“过滤器”包括“父”资源的文本字段和父母父项的下拉列表。该协会如下
Class MyChildResource
belongs_to :myParentResource
Class MyParentResource
attr_accessible :name, :close_to_place, :date
has_many :myChildResources
belongs_to :myGrandParentResource
class MyGrandParentResource
has_many :myParentResources
在活动的管理资源
中ActiveAdmin.register MyChildResource do
action_item :only=>:index do
link_to("Look Up Availability", search_admin_myChildResources_path)
end
collection_action :search do
# do something here similar to the 'filter' feature like filter on myparentresource.date as date
filter on myGrandParentResource as drop down
filter on myParentResource.close_to_place as string
end
end
我是否必须编写自己的自定义元搜索功能?即使我必须根据用户提供的输入编写自己的搜索查询,我也没问题,但我的问题是如何显示父母模型的下拉值和/或利用活动管理员的强大功能过滤器。
我在这个问题中读到了类似的东西,How to add a filter to Active Admin dashboard?,但这是一个黑客,它绝对不能回答显示列表的问题
答案 0 :(得分:1)
我还没有找到任何DRY方式这样做,所以我最终创建了自己的搜索表单,该表单使用上面链接中提到的“侧边栏”和“面板”的活动admin css以及每个下拉,文本字段,日期和按钮的元素。所以我得到一个看起来像边栏的小部件。 对于搜索结果,我正在运行自己的查询并根据用户输入进行搜索。 搜索表单如下所示:
Search For <br>
<div id="search_filter_partial" class="panel_contents">
<%= form_tag(search_path,:remote=>true,:class=>"filter_form", :name=>"search_filters") do %>
<div class="filter_form_field filter_string">
<%= label_tag(:author, "Author",:class=>" label") %>
<%= text_field_tag (:author) %>
</div>
<div class="filter_form_field filter_select">
<%= label_tag(:book, "Book",:class=>" label") %>
<%= select("book","book_id", @books.map {|u| [u.name,u.id]}) %>
</div>
<div class="filter_form_field filter_string">
<%= label_tag(:published_date, "Published Date",:class=>"label")%>
<%= date_select :book,:published_date %>
</div>
<div class="buttons">
<%= submit_tag('Find It', :onclick => "validateForm();") %>
<a class="clear_filters_btn" href="#">Clear</a>
<input id="order" type="hidden" value="id_desc" name="order">
<input id="scope" type="hidden" name="scope">
</div>
<%end%></div>
看起来不太好,但这是我能想到的最好的,因为我希望与Active Admin的外观保持一致