如何停止从数据库中获取每篇文章的will_paginate

如何停止从数据库中获取每篇文章的will_paginate

问题描述:

我只是用Ruby on Rails 3.0与简单的留言板一起玩,并发现与will_paginate有几个问题。如何停止从数据库中获取每篇文章的will_paginate

最紧迫的是每次显示新页面时,都会执行主题中每个帖子的数据库查询。

正如你所想象的,如果你有一个有超过10,000个帖子的主题,这是非常缓慢的。

有没有办法阻止这种奇怪的行为?

显示控制器:

@[email protected] 
@posts = Post.paginate @posts, :page => params[:page],:order => "post_number" 

型号

cattr_reader :per_page 
@@per_page = 20 

视图

<%= will_paginate @posts %> 
+1

您是否将使用生成的SQL从development.log更新此问题? – marshally 2010-09-07 12:51:35

在你的控制器试试:

@posts = Post.paginate_by_topic_id @topic.id, :page => params[:page],:order => "post_number" 

看看will_paginate docs中的示例

+0

paginate_by_topic_id未定义,实际上没有paginate_by_xxx方法。响应的唯一分页方法是:“paginate”,“paginate_by_sql”,“paginated_each”。这是使用3.0.pre2这似乎是最新的版本。 – user370731 2010-09-06 02:22:37

+1

帖子中是不是'belongs_to:topic'与'topic_id'列? – danivovich 2010-09-06 15:54:59

+0

我用paginate_by_sql解决了它。 – user370731 2010-09-06 23:02:18

将will_paginate升级到3.0.0版。然后:

class Post 
    self.per_page = 20 
end 

@topic.posts.page(params[:page]).order("post_number")