我在Rails 5和MySQL中使用当前版本的Ransack gem,并希望实现一个搜索表单,其中我可以有两个选择字段:
1)第一个下拉列表选择列表应该包含表列属性,例如。 first_name,last_name,street
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文档中找到任何示例。
它看起来怎么样?
答案 0 :(得分:3)
尝试这样的事情。我在一个应用程序中使用过它。这使用了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的完整文档。可以将这些值提供给only
中的c.predicate_select
选项。如果需要,您也可以非常轻松地构建custom predicates。
hansack的良好文档来源是ransack demo app。例如,这里是how they build an advanced search form。您还可以查看live demo of advanced search。
这是高级搜索演示的屏幕截图。它看起来与你想要实现的相似。