2014-09-29 79 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

相關問題