2011-12-18 40 views
0

我有頁面顯示索引中的項目。如何選擇以Rails中的數字開頭的行?

我能夠獲得使用字母項目如下:

scope :by_letter, lambda { |letter| where("name LIKE '#{letter}%'") } 

但我想不出該用數字(0-9)開頭的名稱一個完美的解決方案。

我怎麼能重寫這個或一個單獨的範圍,讓我搜索名稱以數字開頭?

編輯:我想要一次去所有以0-9開頭的行(對每個數字不分別)。

+0

您試過了嗎? .by_letter( 「1」)'。它應該工作。只需將名稱更改爲by_character,即可獲得! :) –

+0

更新了問號:) - 我的意思是一次性讀取以數字開頭的行。 – Jacob

回答

4

這應該工作

scope :starts_with_number, where("name REGEXP '[0-9]%'") 
+0

太棒了!比我的解決方案好得多。謝謝! – Jacob

+0

MySQL似乎與'REGEXP'^ [0-9]'' – Jacob

+0

'我只是會說:D –

0

以下是我最後做它:

@letter_merchants = [] 
(0..9).to_a.each do |digit| 
    @letter_merchants |= Merchant.by_letter(digit) 
end 
+0

只是意味着=>這個代碼將執行多少個查詢? – cristian

+0

一個gazillion太多了:D – Jacob

1

雅各,試試這個稍微改寫了你最後什麼樣的主意版本:

@letter_merchants = (0..9).map { |d| Merchant.by_letter(d) } 

請注意,這隻能說明Ruby的真棒語言,而不是應該如何解決問題(會出現這種情況許多數據庫調用)。

+0

哇,這真是太棒了!謝謝! – Jacob

0

REGEXP的一個缺點是它不能使用索引。但是

scope :starts_with_number, where("name >= '0' and name < ':') 

可以使用名稱上的索引。它確實依賴於字符0-9:正好是這樣的順序,其間沒有任何內容,在任何類似ascii,utf8的情況下都是如此,但如果您使用ebcdic或其他任何類似的東西,則不會出現這種情況

相關問題