【问题标题】:Can't use cont_any for multiterm search with Ransack (Rails 5)?不能在 Ransack (Rails 5) 中使用 cont_any 进行多词搜索?
【发布时间】:2018-09-04 08:28:50
【问题描述】:

我正在使用 Ransack 进行搜索,效果很好。但我希望用户能够在同一个搜索输入字段中搜索多个关键字。

例如,如果我有博客“我住在俄亥俄州”,我希望用户能够搜索“我俄亥俄州”,它会找到该博客。我尝试了以下不起作用:

  <%= search_form_for @search do |f| %>
      <%= f.search_field :title_or_description_cont_any %>
      <% f.submit %>
  <% end %>

这是我的控制器:

   def index
     @search = Blog.ransack(params[:q])
     @blogs = @search.result
   end

我原以为 cont_any 会起作用,但由于某种原因它不起作用?


更新:我也在使用 active_admin,我不知道这是否重要?

【问题讨论】:

  • 你试过matches_any吗?
  • 我尝试了matches_any,但它不起作用:-/
  • 在他们的文档中,他们使用了search_field,你试过吗? &lt;%= f.search_field title_or_description_cont %&gt;。你也可以分享你form吗?

标签: ruby-on-rails ruby-on-rails-5 activeadmin ransack


【解决方案1】:

我觉得应该是这样的

def index
  @search = Blog.ransack(params[:q])
  @blogs = @search.result(distinct: true)
end

你的表单应该是这样的,

<%= search_form_for @q do |f| %>
  <%= f.search_field :title_or_description_cont %>
<% end %>

【讨论】:

  • 仍然无法正常工作,我也尝试了 cont_any :-/
【解决方案2】:

Titledescription 需要是数据库中的实际字段。例如,如果您创建了一个包含 headersubtitleshortDescription 字段的 Post 模型,则需要使用这些字段而不是 titledescription

<%= f.input :title_or_description_cont_any %>
<%= f.input :title_or_description_cont %>

类似这样的:

<%= f.input :header_or_shortDescription_cont_any %>

【讨论】:

    【解决方案3】:

    我也有这个问题(也是 Rails 5)。最终对我有用的是使用 *_cont_all 并将其传递给一组搜索词。

    查看:(通用 Rails form_with,所以我可以发送参数,因为我们的用例太长/冗长/复杂,无法轻松阅读 ransack 搜索表单!)

    = form_with url: book_search_path, method: :get do |f|
       
      .input-label Book Title
      = f.text_field :title_terms,  value: @title_terms
      
      . . .

    然后在我的控制器中,我使用了 *_cont_all,但传递给它一个按空格分隔的术语数组。 (请注意,我没有使用 params[:q],我只是创建一个空哈希并将其命名为 'q',然后将 q 传递给 ransack -- Book.ransack(q))

    # make an array of terms, split on spaces
      q[:book_titles_cont_all] = params[:title_terms].split(' ')

    最后,我将 q 传递给 Book.ransack(q) 并将结果发送到我的视图。

    【讨论】:

      猜你喜欢
      • 2016-11-17
      • 1970-01-01
      • 2015-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多