Я использую will_paginate с отношением HABTM между сообщениями в блоге и тегами. Всякий раз, когда я применяю разбиение на страницы, я получаю дублирующиеся сообщения, потому что HABTM в Rails не сохраняет уникальность базы данных, он применяет уникальность при выполнении запроса.
blog_posts.rb
has_and_belongs_to_many :tags, :uniq => true
тег.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)
Редактировать: похоже, это проблема и с Каминари.