首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby on Rails will_paginate数组

Ruby on Rails will_paginate数组
EN

Stack Overflow用户
提问于 2010-12-04 17:40:17
回答 5查看 52.8K关注 0票数 75

我想知道是否有人能解释一下如何在对象数组上使用will_paginate

例如,在我的网站上,我有一个评论部分,用户可以在那里对意见进行评分。这是我写的一个方法,用来收集评价意见的用户:

代码语言:javascript
复制
def agree_list
  list = OpinionRating.find_all_by_opinion_id(params[:id])
  @agree_list = []
  list.each do |r|
    user = Profile.find(r.profile_id)
    @agree_list << user
  end
end

谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-12-07 05:45:32

will_paginate 3.0旨在利用Rails3中的新ActiveRecord::Relation,因此默认情况下它只在关系上定义paginate。它仍然可以与数组一起工作,但您必须告诉rails需要该部分。

在您的config/initializers (我使用的是will_paginate_array_fix.rb)的文件中,添加以下内容

代码语言:javascript
复制
require 'will_paginate/array'

然后,您可以对数组使用

代码语言:javascript
复制
my_array.paginate(:page => x, :per_page => y)
票数 222
EN

Stack Overflow用户

发布于 2010-12-04 18:10:14

gem will_paginate将对ActiveRecord查询和数组进行分页。

代码语言:javascript
复制
list = OpinionRating.where(:opinion_id => params[:id]).includes(:profile).paginate(:page => params[:page])
@agree_list = list.map(&:profile)
票数 4
EN

Stack Overflow用户

发布于 2013-06-29 06:13:34

如果您不想使用配置文件或遇到问题,也可以确保返回ActiveRecord::Relation而不是数组。例如,将agree_list改为用户ids列表,然后对这些ids执行IN以返回关系。

代码语言:javascript
复制
def agree_list
  list = OpinionRating.find_all_by_opinion_id(params[:id])
  @agree_id_list = []
  list.each do |r|
    user = Profile.find(r.profile_id)
    @agree_id_list << user.id
  end
  @agree_list = User.where(:id => @agree_id_list) 
end

从数据库的角度来看,这是低效的,但是对于任何对will_paginate配置文件有问题的人来说,这都是一个选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4352895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档