gpt4 book ai didi

ruby-on-rails - rails 从 searchlogic 文本字段中修剪空白

转载 作者:行者123 更新时间:2023-12-04 06:49:09 28 4
gpt4 key购买 nike

这有效:

基线 Controller

@search = Baseline.search(params[:search])

@baselines = @search.paginate :page => params[:page], :per_page => params[:per_page]

基线索引 View
<% form_for @search do |f| %>
<%= f.text_field :baseline_name_like_or_description_like %>
<%= submit_tag 'Search' %>
<% end %>

我将在哪里修剪 text_field 中的前导和尾随空格? ?我可以使用 .strip!某处?

最佳答案

令人惊讶的是,尼克很难找到有关高级 Searchlogic 技术的信息。 sanitizer 对我来说特别困难。

这是处理您的问题的一种非常漂亮(且快速)的方法。

Controller

保持不变

意见/基线/index.html.erb

<% form_for @search do |f| %>
<%= f.text_field :keywords %>
<%= submit_tag 'Search' %>
<% end %>

模型/baseline.rb
class Baseline < ActiveRecord::Base
scope_procedure :keywords, lambda { |query|
baseline_name_like_or_description_like(query.strip)
}
end

附加功能

我很高兴能分享我从 Searchlogic 中学到的其他很酷的东西,所以我将在这里分享它们。

首先,只需很少的工作,您就可以启动 keywords scope_procedure 以最小的努力。
scope_procedure :keywords, lambda { |query|
baseline_name_like_any_or_description_like_any(query.strip.split(/\s+/))
}

备注 添加 any每个 named_scope 的运算符

这将允许您输入诸如“foo bar”之类的搜索,它将匹配诸如“i can foo haz bar”或“bar time, foo!”之类的baseline_names。如果名称是“foo”并且描述是“bar”,这甚至会匹配基线;重点是,如果您使用 scope_procedure,您将获得大量额外的控制权。而不是预定义的 named_scope在您的 Searchlogic 表单中。

其次,您可以通过一些额外的努力来清理您的搜索表单。这个花了很长时间才弄清楚,但我决定创建 Searchlogic::Search 类的子类。
看看这个:

模型/baseline_search.rb
class BaselineSearch < Searchlogic::Search
def initialize(params, klass, current_scope)

allowed_params = [:keywords, :name_like_any, :foo_equals, :order]

conditions = {}

for x in allowed_params
conditions[x] = params[x] unless params[x].blank?
end

super(klass, current_scope, conditions)
end
end

如果你想知道我在哪里找到的 initialize方法签名,检查 Searchlogic::Search

现在,您需要在baseline.rb 中创建一个简单的覆盖,而不是在您的模型上调用Searchlogic::Search。在这里,我们将实现自己的 Searchlogic::Search::Implementation

模型/baseline.rb
class Baseline < ActiveRecord::Base

# cool scope procedures
# ...

def self.search(params={})
BaselineSearch.new(params || {}, self, scope(:find))
end
end

现在,当您调用 Baseline.search(params[:search]) ,它将调用一个新的 BaselineSearch而不是 Searchlogic::Search 默认值。这里很酷的是,如果您想跳过使用 BaselineSearch ,您可以调用 Baseline.searchlogic(params[:search])改为使用 Searchlogic 默认值。

关于ruby-on-rails - rails 从 searchlogic 文本字段中修剪空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3373803/

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