2015-05-15 78 views
0

我寫了一個函數,它不會做我認爲它做的事,即使測試通過了。獲取基於.all和當前對象的x頁面Ruby

def max_pages(object, current_object, per_page = nil) 
    per_page = !per_page.nil? ? per_page : 10 
    max_pages = ((object.count - current_object.count)/ per_page.to_f).ceil 
end 

什麼,我想說的是,如果我給你10出20(總)的帖子,說我想每頁10個職位,我應該得到1頁。 此測試有效。但是現在如果我給你20個職位中的20個職位,並說每頁10個職位,我應該得到2頁。 此測試失敗

注:當我說「這個測試」我的意思是邏輯測試,而不是實際的RSpec。

因此,要使用此功能,你會怎麼做:

max_pages(Post.all, post.find(10)) # => 1 pages. 

# I should get 2 pages but don't 
max_pages(Post.all, Post.all) # => 0 Pages 

# This isnt right either, I should only get one page... 
max_pages(Post.all, Post.find(5)) # => 2 Pages 

最後一次測試應該只給我一個頁面,因爲我只是要顯示5個帖子了所有的20個職位的,因爲我說默認每頁10個帖子,應該有1個頁面包含5個帖子。

我覺得這是一個邏輯問題:

max_pages = ((object.count - current_object.count)/ per_page.to_f).ceil 

我不知道我會太改變這一點。

的概念,我想:

如果你有20個職位,我說我只想要3個員額,我應該每頁顯示10個職位(默認)。我應該得到一個頁面。

如果你有20個職位,我說我只想要15個職位,我只允許每頁5個職位,我應該得到3頁返回。

最後,如果您有1500個帖子,而您只需要500個帖子,而且每頁只允許發佈10個帖子,則應該有50個帖子。

我可以做(current_object.count/per_page.to_f).ceil但我知道你必須考慮數據庫中有多少帖子。

我可能是可怕的錯誤。

+0

您的評論不提供任何有幫助的意見,建議或提示。我已經清楚地列出了我的期望和回報。請考慮添加一些例子或沖洗你的評論痛風。 @PrakashMurthy – TheWebs

+0

@PrakashMurthy是正確的。 'find(10)'將返回ID = 10的帖子;不會返回前10個帖子。這就是失敗的原因。如果你正在做分頁,我建議看看'will_paginate'或'kamanari'寶石。他們爲你處理所有這些。 –

回答

1

從你的例子,這聽起來像你想的:

actual_count = [object.count, current_object.count].min 
max_pages = (actual_count/per_page.to_f).ceil 

我可以看到,職位總數爲相關的唯一方法是,如果你可能會要求更多帖子之外還有在數據庫中,所以這就是爲什麼我把min放在那裏。如果永遠不會發生,您可以完全刪除object。清理一下,我想試試這個:

def max_pages(object, current_object, per_page = 10) 
    actual_count = [object.count, current_object.count].min 
    (actual_count/per_page.to_f).ceil 
end