2014-09-29 27 views
0

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

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

我想修改这个,所以如果用户输入'?'它被单个字符的通配符替换为'_',多个字符通配符替换为'%'。

是否有办法将这些替换合并到我的范围中,还是需要将范围重写为一种方法?如果是这样,该方法应该是什么样子?

回答

1

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

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

完美。谢谢。唯一的是?和_应该被切换。 – sabrams 2014-09-29 21:44:33

+0

哎呀,很好。固定! – 2014-09-29 21:46:33

相关问题