2010-09-05 2 views
3

Я просто играю с 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

ответ

1

в контроллере попробовать:

@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

+1

Есть ли сообщение 'принадлежать_то: topic' с колонкой' topic_id'? – danivovich

+0

Я решил это, используя paginate_by_sql. – user370731

0

Обновление будет_поляцией до версии 3.0.0. Затем:

class Post 
    self.per_page = 20 
end 

@topic.posts.page(params[:page]).order("post_number") 
Смежные вопросы