我在进行复杂查找时遇到了 will_paginate 的问题。
:photo has_many :tags, :through => :tagships
:item has_many :photos
:photo belongs_to :item
@photos = @item.photos.paginate :page => params[:page],
:per_page => 200,
:conditions => [ 'tags.id IN (?)', tag_ids],
:order => 'created_at DESC',
:joins => :tags,
:group => "photos.id HAVING COUNT(DISTINCT tags.id) = #{tag_count}"
我想获取所有在 tag_ids 数组中具有所有标签的照片。MySQL 的 IN 通常进行“或”搜索,但我需要“和”。我在这里找到了如何修改 IN 以模仿“和”行为,并且在使用 model.find() 时它可以正常工作,只要获取的记录数低于我的 :per_page 计数也可以。但如果它必须分页,生成的 SQL 类似于:
SELECT count(*) AS count_all, photos.id HAVING COUNT(DISTINCT tags.id) = 1 AS photos_id_having_count_distinct_tags_id_1 FROM `photos`(...)
这是行不通的。其他人已经看到了这个错误并且能够将他们的 count() 移出查询,但我认为这在我的情况下是不可能的。
有没有更好的方法可以与 will_paginate 一起使用?如果这是唯一的方法,我想我应该看看另一个分页插件?
谢谢!