浏览 2190 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-10
参考了这篇文章:http://opensoul.org/2007/8/17/acts_as_ferret-will_paginate model #全文检索方法 def self.full_text_search(q, options = {}) return nil if q.nil? or q=="" default_options = {:limit => 10, :page => 1} options = default_options.merge options # get the offset based on what page we're on options[:offset] = options[:limit] * (options.delete(:page).to_i-1) results = Page.find_by_contents(q, options) end 戏肉来了,在application.rb写了一个公用的分页 #全文检索分页方法 def pages_for(result,options = {}) page, per_page, total = (options[:page] || 1),(options[:per_page] || 30),(result.total_hits || 0) page_total = page * per_page index = (page.to_i - 1) * per_page pager = WillPaginate::Collection.new(page, per_page, page_total) returning WillPaginate::Collection.new(page, per_page, total) do |pager| pager.replace result[index,per_page] end end 在controller中如下使用 results = Page.full_text_search @q @pages = pages_for(results,:page => 1) 当然山寨的东西,质量不敢保证,不过不用担心,会有售后服务的,只是先写下这个思路和初步的实现(怕忘记了),以后继续使用,会慢慢地完善。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-10-10
pager = WillPaginate::Collection.new(page, per_page, page_total) returning WillPaginate::Collection.new(page, per_page, total) do |pager| 请问第一个pager是不是会被block的给覆盖,起不了作用? |
|
返回顶楼 | |
发表时间:2008-10-10
pager在这里只是一个定义了page_total数量的数组(每个对象都是nil),
后面是block是会把真实的数据项替换掉nil,所以就有了will_paginate列表了. |
|
返回顶楼 | |
发表时间:2008-10-10
第6行 pager = WillPaginate::Collection.new(page, per_page, page_total) 是不必要的代码,可以省略
|
|
返回顶楼 | |
发表时间:2008-10-10
Quake Wang此言不差,我开始没搞清楚ruturning的用法
看到一个帖子 http://9esuluciano.iteye.com/blog/123917 如是说:ruturning 实际上就是把一个value放到一个block中做处理,处理完毕之后返回,就这么简单 |
|
返回顶楼 | |