我想添加在我的搜索中使用通配符的功能。我正在使用带有SQLite3的rails 3。我的搜索内置于我的控制器的索引操作中,使用模型中定义的范围。
scope :by_drawing_number, lambda { |drawing_number| where('drawing_number LIKE ?', "#{drawing_number}") unless drawing_number.nil? }
如果用户输入'?',我想修改它对于单个字符通配符,它替换为'_',对于多个字符通配符,'*'替换为'%'。
有没有办法将这些替换纳入我的范围,还是需要将范围重写为方法?如果是这样,该方法应该是什么样的?
答案 0 :(得分:1)
您可以在范围内放置所需的任何逻辑。 scope
基本上只是用于定义类方法的语法糖。这样的事情应该有效:
scope :by_drawing_number, lambda {|drawing_number|
break if drawing_number.nil?
match = drawing_number.tr('?*', '_%')
where('drawing_number LIKE ?', match)
}