【问题标题】:How find similar values search如何找到相似值搜索
【发布时间】:2014-05-27 13:47:54
【问题描述】:

如何搜索相似的值?例如,我发现名字“Allan”。但我想要那个搜索视图“Allan, Allen, Allin, Allister”。相同的三个字符 - 前三个符号

def self.search(search)
    if search
      find(:all, :conditions => ['your_name LIKE ?', "%#{search}%"])
    end
end

【问题讨论】:

  • 在您的示例中,所有匹配的字符串都以“All”开头,即与目标字符串具有相同的三个字符。这只是巧合,还是您的实际规则?你希望“艾伦”和“阿斯兰”也回来吗?
  • 前三个字符相同。例如:“全部”。请帮帮我。

标签: ruby-on-rails search ruby-on-rails-4


【解决方案1】:

如果您的规则只是“以相同的三个字符开头”,那么您就快到了 - 只需从搜索条件中删除第一个 %,然后指定前三个字符。

find(:all, :conditions => ['your_name LIKE ?', "#{search[0..2]}%"])

% 是通配符,因此“%All%”将匹配“Ball”和“Ally”,而“All%”将匹配“Ally”但不匹配“Ball”。

EDIT - 在控制器中设置变量并在视图中使用它的演练。假设有问题的模型是 Foo。我对视图代码做出了很多任意决定。

在控制器中

@matching = Foo.find_all_by_your_name(params[:name])
@similar = Foo.search(params[:name]) - @matching

在视图中

<p>Main Search:</p>
<%= @matching.each do |foo| %>
  <!-- render the foo partial here -->
<% end %>

<% if @similar.size > 0 %>
  <p>Main Search:</p>
  <%= @similar.each do |foo| %>
    <!-- render the foo partial here -->
  <% end %>
<% end %>

【讨论】:

  • 另外,请记住,根据您使用的 DBMS 及其配置方式,搜索可能区分大小写,也可能不区分大小写。
  • 我想将部分命名为“可能你的意思”。
  • 艾伦·詹姆斯,艾伦·杰克逊.....“可能你的意思是”——艾伦·詹姆斯、艾伦·达克、阿利斯特·大脚等(没有艾伦的名字)
  • 编辑了我的答案,尽管这与您提出的问题有所不同。
  • 谢谢。对于我在帖子中的错误问题,我深表歉意。
猜你喜欢
  • 2018-12-18
  • 2022-01-01
  • 2015-12-30
  • 1970-01-01
  • 2015-11-18
  • 2011-03-13
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
相关资源
最近更新 更多