【问题标题】:ransack filter criteria dropdown搜查过滤条件下拉菜单
【发布时间】:2018-01-12 10:08:35
【问题描述】:

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

1) 第一个下拉选择列表应包含表格列属性,例如。名字,姓氏,街道

2) 第二个下拉选择列表应包含“等于”、“不是”、“包含”等运算符

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

在代码中应该是这样的:

<%= 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 文档中找不到任何示例。

它看起来如何正确?

【问题讨论】:

    标签: ruby-on-rails ransack


    【解决方案1】:

    试试这样的。我已经在应用程序中使用了它。这使用了 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 可以获取一组条件并一次全部搜索。在您的情况下,您可以为一组提供一个条件。我知道这看起来相当冗长,但我不确定是否有一种更简单的洗劫方法(虽然可能有一个)。

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

    您可以阅读有关谓词here 的完整文档。这些值可以提供给c.predicate_select 中的only 选项。如果需要,您也可以相当轻松地构建 custom predicates

    ransack demo app 是一个很好的搜查文档来源。例如,这里是how they build an advanced search form。也可以看看live demo of advanced search

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

    【讨论】:

    • 非常感谢!它工作得很好,但在 中,“only :id”语句似乎被忽略了。在选择下拉列表中,所有属性都可用。你知道如何只允许名字、姓氏和街道作为下拉列表的值吗?
    • @Trinity76 啊,你是对的。那时候我想过那个。一种方法是在模型上定义 ransackable_attributes 方法 (github.com/activerecord-hackery/…)。不过,这将是对该模型的所有洗劫搜索的全局更改。
    猜你喜欢
    • 2023-03-11
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 2020-06-20
    • 1970-01-01
    • 2018-09-06
    相关资源
    最近更新 更多