【问题标题】:Rails scope searching with wild cards使用通配符进行 Rails 范围搜索
【发布时间】:2014-11-24 09:21:29
【问题描述】:

我想在我的搜索中添加使用通配符的功能。我正在使用带有 SQLite3 的 rails 3。我的搜索使用模型中定义的范围内置到我的控制器的索引操作中。

scope :by_drawing_number, lambda { |drawing_number| where('drawing_number LIKE ?', "#{drawing_number}") unless drawing_number.nil? }

我想修改它,如果用户输入“?”单个字符通配符用“_”替换,多个字符通配符用“%”替换“*”。

有没有办法将这些替换合并到我的作用域中,或者我是否需要将作用域重写为一种方法?如果是这样,该方法应该是什么样的?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 search sqlite wildcard


    【解决方案1】:

    您可以将任何您想要的逻辑放入范围内。 scope 基本上只是定义类方法的语法糖。像这样的东西应该可以工作:

    scope :by_drawing_number, lambda {|drawing_number|
      break if drawing_number.nil?
      match = drawing_number.tr('?*', '_%')
      where('drawing_number LIKE ?', match)
    }
    

    【讨论】:

    • 完美。谢谢。唯一的事情是?并且 _ 应该被切换。
    猜你喜欢
    • 2020-10-07
    • 2021-05-22
    • 1970-01-01
    • 2015-05-12
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 2019-03-08
    相关资源
    最近更新 更多