3

我想在自定义页面上使用活动管理员提供搜索小部件/过滤器功能以提供查找功能。使用 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

我是否必须编写自己的自定义 meta_search 功能?即使我必须根据用户提供的输入编写自己的搜索查询,我也会很好,但我的问题是如何显示来自父级父级模型的下拉值和/或利用活动管理员的力量过滤器。

我在这个问题中读到了类似的内容,如何将过滤器添加到 Active Admin 仪表板?,但它是一个 hack,它绝对不能回答显示列表的问题

4

1 回答 1

3

我还没有找到任何干的方式来做这件事,所以我最终创建了自己的搜索表单,它使用了上面链接中提到的“侧边栏”和“面板”以及 drop 的每个元素的活动管理 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 的外观和感觉保持一致

于 2012-08-03T06:15:59.717 回答