自定义页面上的Active Admin Search / Filter小部件

时间:2012-07-23 11:55:02

标签: ruby-on-rails-3 search filter activeadmin

我想在自定义页面上使用活动管理员提供搜索小部件/过滤器功能,以提供查找功能。使用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?,但这是一个黑客,它绝对不能回答显示列表的问题

1 个答案:

答案 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的外观保持一致