2014-02-09 51 views
0

它看起来像我可以用一个或另一个但不是两者,任何人对如何做到这一点的例子吗?问题是,为了使用will_paginate,我必须使用的搜索方法的模型如何同时使用will_paginate和过滤器与轮胎(弹性搜索)

Item.search("test", :page => 1, :per_page => 20) 

但为了使用过滤器,我必须直接使用轮胎:

search = Tire::Search::Search.new("items") 
search.filter :term, :selected => true 

但我无法找到如何做到这一点。感谢您的任何建议。

回答

0

我还没有使用这个库,但据我可以从源代码中找出来,Model#search和Tire :: Search :: Search应该采用相同的选项。如果你看一下产品型号#搜索源代码,它这样做(减少到相关部分):

def search(*args, &block) 

    query, options = args 

    s = Tire::Search::Search.new(options.delete(:index), options) 

这样的选择是通过对轮胎::搜索::搜索的初始化只是递给。

但是,这只是创建对象。轮胎::搜索::搜索似乎在内部使用术语sizefrom而不是per_pagepage。所以上面的代码将继续这样的:

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(而sizeper_page是相似的)。 from是绝对的位置。 (我不知道Tire :: Results :: Pagination :: default_per_page在这里增加了什么,或许可以设置一些默认值。)

为了得出结论,我的教育猜测应该是这样的为你工作:

search = Tire::Search::Search.new("items", size: 20, from: 0) 

其中用于其他页面位置,你会计算(per_page *(页面 - 1))

相关问题