Rails范围用外卡搜索

时间:2014-09-29 21:20:24

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

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

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

如果用户输入'?',我想修改它对于单个字符通配符,它​​替换为'_',对于多个字符通配符,'*'替换为'%'。

有没有办法将这些替换纳入我的范围,还是需要将范围重写为方法?如果是这样,该方法应该是什么样的?

1 个答案:

答案 0 :(得分:1)

您可以在范围内放置所需的任何逻辑。 scope基本上只是用于定义类方法的语法糖。这样的事情应该有效:

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