2015-09-25 53 views
0

假設我有一個產品型號爲idsort_number如何通過命令獲得下一個記錄「彎曲」?

id  | sort_number (random) 
1  | 325 
2  | 161 
3  | 58 
... 
147  | 500 # the biggest sort_number number is equal to the Product.count result 
... 
500  | 5 

我想next(n = 20)previous(n = 20)方法的產品實例。 IE如果我:

product = Product.find(43) 
product.sort_number # => 490 
product.next(20) # should return products with sort_number equal to (491..500) + (1..10) 

我該如何實現此功能?如果下一個沒有更多記錄,我怎樣才能得到sort_number從1開始的下一條記錄?

+0

'Product.where'sort_number>? AND sort_number <?',product.sort_number,product.sort_number + 20' – mudasobwa

+0

如果'sort_number'等於100,會怎麼樣?我需要用'101-120'獲得記錄sort_number – asiniy

+0

你會得到它們。對於'(490..500)'和'(1..10)',你需要另一個基於返回計數的查詢。我不知道1查詢方法來實現(實際上,我是,但SQL查詢將是不可讀的。) – mudasobwa

回答

0

好的,我會把這個作爲答案。

def next id, count 
    product = Product.find(id) 
    products = Product.where(
       'sort_number > ? AND sort_number <= ?', 
       product.sort_number, product.sort_number + count 
      ) # this will return 20 requested, unless sort_number is near 500 

    products |= Product.where(
       'sort_number > 1 AND sort_number <= ?', 
       count - product.count 
      ) if products.count < count 

    products 
end