gpt4 book ai didi

ruby-on-rails - Ransack搜索,如何通过分割输入搜索参数来搜索每个词

转载 作者:行者123 更新时间:2023-12-04 05:39:07 24 4
gpt4 key购买 nike

我目前正在尝试使用 ransack gem在 Rails 中对模型进行搜索。就目前而言,我正在使用基本设置。

Controller :

def index
@q = Person.search(params[:q])
@people = @q.result(:distinct => true)
end

看法:
<%= search_form_for @q do |f| %>
<%= f.label :name_cont %>
<%= f.text_field :name_cont %>
<%= f.submit %>
<% end %>

我设法找到了很多关于在多个领域进行搜索的信息,但是,我没有找到任何可以帮助我拆分 :q 的信息。参数,从而使我能够在以 search for ??? AND ??? AND ??? ... 形式输入的搜索字符串中搜索每个(未知数量的)单词。 , 而不是在一个部分中搜索整个字符串

有人能指出我正确的方向吗?

最佳答案

这是使用自定义 Ransack 谓词的答案:

# config/initializers/ransack.rb

Ransack.configure do |config|
config.add_predicate 'has_any_term',
arel_predicate: 'matches_any',
formatter: proc { |v| v.scan(/\"(.*?)\"|(\w+)/).flatten.compact.map{|t| "%#{t}%"} },
validator: proc { |v| v.present? },
type: :string
end

Ransack.configure do |config|
config.add_predicate 'has_every_term',
arel_predicate: 'matches_all',
formatter: proc { |v| v.scan(/\"(.*?)\"|(\w+)/).flatten.compact.map{|t| "%#{t}%"} },
validator: proc { |v| v.present? },
type: :string
end

搜索表单将使用自定义谓词,如下所示:
# In your view

# to search for any of the terms existing in my_field
=search_form_for @search do |f|
=f.search_field :my_field_has_any_term


# to search for all of the terms existing in my_field
=search_form_for @search do |f|
=f.search_field :my_field_has_every_term

双引号的术语将被自动识别。

关于ruby-on-rails - Ransack搜索,如何通过分割输入搜索参数来搜索每个词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15611869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com