看起来我可以使用其中一个而不是两个,任何人都有一个如何做到这一点的例子?问题是,为了使用will_paginate,我必须在模型中使用搜索方法
Item.search("test", :page => 1, :per_page => 20)
但是为了使用过滤器,我必须直接使用Tire:
search = Tire::Search::Search.new("items")
search.filter :term, :selected => true
但我无法找到如何做到这两点。谢谢你的任何建议。
答案 0 :(得分:0)
我还没有使用这个库,但据我所知,源代码中,Model#search和Tire :: Search :: Search应该采用相同的选项。如果您查看Model#search的源代码,它会执行此操作(缩减为相关部分):
def search(*args, &block)
query, options = args
s = Tire::Search::Search.new(options.delete(:index), options)
所以选项只是传递给Tire :: Search :: Search的初始化器。
但这只是创造了对象。 Tire :: Search :: Search似乎在内部使用术语size
和from
而不是per_page
和page
。所以上面的代码继续这样:
page = options.delete(:page)
per_page = options.delete(:per_page) || Tire::Results::Pagination::default_per_page
s.size( per_page.to_i ) if per_page
s.from( page.to_i <= 1 ? 0 : (per_page.to_i * (page.to_i-1)) ) if page && per_page
所以似乎from
与page
的工作方式不同(size
和per_page
相似)。 from
是一个绝对的立场。 (我不知道究竟是什么Tire :: Results :: Pagination :: default_per_page在这里添加,也许可以设置一些默认值。)
总而言之,我的有根据的猜测是,这样的事情对你有用:
search = Tire::Search::Search.new("items", size: 20, from: 0)
您要计算的其他页面位置(per_page *(第1页))