[英]ransack filter criteria dropdown
我将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文档中找不到任何示例。
看起来如何正确?
尝试这样的事情。 我已经在应用程序中使用了它。 这使用了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可以处理一组条件并一次搜索所有条件。 在您的情况下,您可以为一组提供一个条件。 我知道这似乎很冗长,但是我不确定使用sacksack会更简单(虽然可能有一种方法)。
我要说的关键是f.grouping_fields(f.object.new_grouping)
和g.condition_fields(g.object.new_condition)
。 这些工作类似于fields_for
,因为您需要至少一个分组设置才能使该块呈现任何内容。
您可以在此处阅读有关谓词的完整文档。 这些值可以提供给c.predicate_select
的only
选项。 如果需要,您还可以轻松构建自定义谓词 。
ransack演示应用程序是ransack很好的文档来源。 例如,这是他们构建高级搜索表单的方式 。 您还可以查看高级搜索的实时演示 。
这是高级搜索演示的屏幕截图。 它看起来与您要实现的目标相对相似。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.