搜索筛选条件下拉列表

ransack filter criteria dropdown

我将当前版本的 Ransack gem 与 Rails 5 和 MySQL 一起使用,并希望实现一个搜索表单,其中我可以有两个 select 字段:

1) 第一个下拉 select 列表应包含 table 列属性,例如。 first_name、last_name、街道

2) 第二个下拉 select 列表应包含 "equals"、"is not"、"contains"

等运算符

然后是搜索关键字的输入字段和提交按钮。

在代码中它应该看起来像这样:

<%= search_form_for @search do |f| %>
  <%= f.select :select_criteria, options_for_select([
        ['first name', :first_name], 
        ['last name', :last_name], 
        ['street', :street]
        ]), @search.select_criteria %>
  <%= f.select :operator, options_for_select([
      ['contains', :contains], 
      ['is not', :is_not], 
      ['equals', :equals]
      ]), @search.operator %>
  <%= f.search_field :term %>
  <%= f.submit "filter" %>
<% end %>

但我在涉及此案例的搜查文档中找不到任何示例。

它看起来怎么样?

尝试这样的事情。我在应用程序中使用过它。这使用了 ransack 演示应用程序中显示的技术。

<%= search_form_for @search do |f| %>
  <%= f.grouping_fields(f.object.new_grouping) do |g| %>
    <%= g.condition_fields(g.object.new_condition) do |c| %>
      <%= c.attribute_fields do |a| %>
        <%= a.attribute_select only: %i(id) %>
      <% end %>
      <%= c.predicate_select only: %i(cont not_eq eq) %>
      <%= c.value_fields do |v| %>
        <%= v.text_field :value %>
      <% end %>
    <% end %>
  <% end %>
  <%= f.submit "filter" %>
<% end %>

Ransack 可以获取一组条件并一次搜索它们。在您的情况下,您可以为一组提供一种条件。我知道这看起来相当冗长,但我不确定是否有一种更简单的 ransack 方法(虽然可能有)。

我想说这里的关键行是 f.grouping_fields(f.object.new_grouping)g.condition_fields(g.object.new_condition)。这些工作方式与 fields_for 相似,因为您至少需要为块设置一个分组设置才能呈现任何内容。

如果需要,您可以很容易地阅读有关谓词的完整文档 here. These values can be provided to the only option in c.predicate_select. You can also build custom predicates

搜查文档的一个很好的来源是 ransack demo app. For example, here's how they build an advanced search form. You can also look at the live demo of advanced search

这是高级搜索演示的屏幕截图。它看起来与您要实现的目标比较相似。