2012-07-30 59 views
1

我正在使用will_paginate和博客文章和標籤之間的HABTM關係。無論何時應用分頁,我都會顯示重複的帖子,因爲Rails中的HABTM不會保持數據庫的唯一性,它會在查詢時應用唯一性。Rails will_paginate在HABTM模型上顯示重複信息

blog_posts.rb

has_and_belongs_to_many :tags, :uniq => true

tag.rb

has_and_belongs_to_many :blog_posts, :uniq => true

documentation ActiveRecord的,:uniq的不會阻止重複關係被存儲,它只是建立時忽略它們查詢。

這裏是問題: tag = Tag.find(1) tag.blog_posts.count等於1,但: tag.blog_posts.page(nil).count等於3,所有3是相同職位的副本。正確的行爲應該是隻顯示1,而不是重複。

我知道我可以複製正在生成的SQL查詢並修復它,但這似乎不是一個好的解決方案。有人能幫我解決潛在的問題嗎? (儘管我擔心它是will_paginate中的一個bug)

編輯:這似乎也是Kaminari的問題。

回答

5

我想我之前遇到過這個問題。嘗試添加這對您的查詢:

.group("id") 

這不是在will_paginate的錯誤,因爲所有所做的是把它給你,並進行分頁它在視圖中的數據。解決方案在於您提供的數據。

+2

This Works!但我不同意,我認爲這是一個錯誤。 will_paginate忽略了ActiveRecord的規範。事情沒有will_paginate工作,他們不工作,因爲它改變了正常的ActiveRecord SQL查詢,你必須走出自己的方式來使事情工作。非常感謝解決方案! – John 2012-07-31 18:51:25

+0

是的感謝Ultimation - 同意這可能被認爲是一個錯誤或至少改進了will_paginate – Brett 2016-07-30 08:31:14