Rails will_paginate показва дубликати на HABTM модели

Използвам will_paginate с връзка HABTM между публикации в блогове и етикети. Всеки път, когато прилагам страниране, получавам дублиращи се публикации, защото HABTM в Rails не поддържа базата данни уникална, тя прилага уникалността при извършване на заявката.

blog_posts.rb

has_and_belongs_to_many :tags, :uniq => true

tag.rb

has_and_belongs_to_many :blog_posts, :uniq => true

Съгласно документация за ActiveRecord, :uniq не предотвратява дублиращи се връзки се съхранява, той просто ги игнорира при изграждане на заявката.

Ето проблема: tag = Tag.find(1) tag.blog_posts.count е равно на 1, но: tag.blog_posts.page(nil).count е равно на 3 и всичките 3 са дубликати на една и съща публикация. Правилното поведение трябва да бъде показване само на 1, без да се дублира.

Знам, че мога просто да копирам SQL заявките, които се генерират тук, и да го поправя по този начин, но това не изглежда добро решение. Може ли някой да ми помогне да поправя основния проблем? (въпреки че се притеснявам, че това е грешка в will_paginate)

Редактиране: Това изглежда е проблем и с Kaminari.


person John    schedule 30.07.2012    source източник


Отговори (1)


Мисля, че се сблъсках с този проблем и преди. Опитайте да добавите това към вашата заявка:

.group("id")

Това не е грешка в will_paginate, защото всичко, което прави, е да вземе данните, които ви дава, и да ги пагинира в изгледа. Решението се крие в данните, които му предоставяте.

person Ultimation    schedule 31.07.2012
comment
Това работи! Но не съм съгласен, мисля, че е грешка. will_paginate игнорира спецификациите на ActiveRecord. Нещата работят без will_paginate, те не работят с него, защото променя нормалната ActiveRecord SQL заявка и трябва да дадете всичко от себе си, за да накарате нещата да работят. Благодаря много за решението!!! - person John; 31.07.2012
comment
Да, благодаря Ultimation - съгласете се, че това може да се счита за грешка или поне подобрение за will_paginate - person Brett; 30.07.2016