【发布时间】:2010-08-19 07:31:21
【问题描述】:
在rails3中,现在几乎所有的查询接口都变成了延迟加载,但是'will_paginate'会在你使用'paginate'方法后立即访问数据库。我怎样才能让它延迟加载记录?
【问题讨论】:
标签: ruby-on-rails will-paginate lazy-loading queryinterface
在rails3中,现在几乎所有的查询接口都变成了延迟加载,但是'will_paginate'会在你使用'paginate'方法后立即访问数据库。我怎样才能让它延迟加载记录?
【问题讨论】:
标签: ruby-on-rails will-paginate lazy-loading queryinterface
我通过重写 will_paginate 中的许多代码来实现它,will_paginate 延迟加载真的很难,因为 will_paginate 有一个核心类 'WillPaginate::Collection',它是 'Array' 的子类。(我不喜欢此类)
'paginate' 方法生成的所有结果都将返回一个 Collection 实例,因此它将强制将 'ActiveRecord::Relation' 对象放入一个 'Array' 中,这将强制 Relation 立即访问数据库。
【讨论】:
我创建了一个非常轻量级的插件,它使用 limit(per_page).offset(page*per_page) 在 Rails 3 下实现分页。因此,它提供了延迟加载,非常适合片段缓存。界面与 will_paginate (@posts.recent.paginate :page=>params[:page]) 相同。目前还没有太多视图助手,但我相信你会发现它很有用:http://github.com/josei/simple_paginate
【讨论】: