在我的Rails应用程序中,我编写了一个方法,该方法从数据库中的一组记录生成一组唯一名称:
class Book < ActiveRecord::Base
attr_accessible :title, :author
def self.all_authors
self.uniq.pluck(:author)
end
end
此方法按预期工作,但此应用程序最终可能会有大量作者,所以现在我想在控制器中对此查询进行分页。
class AuthorsController < ApplicationController
def index
@authors = Book.all_authors.limit(10).offset(params[:page]*10)
end
end
显然,这不起作用,因为pluck(:authors)
返回一个数组而不是ActiveRecord::Relation
。是否有pluck
的替代方法允许我使用Arel方法调用链?或者也许一种让pluck返回ActiveRecord::Relation
而不是数组的方法?
答案 0 :(得分:3)
试试这个:
@authors = Book.limit(10).offset(params[:page]*10).all_authors
# => ["first pair of authors", "second pair of authors", ...]
您只需要在链的末尾调用pluck
方法。
否则,您可以使用select
,它只返回数据库中的指定列:
@authors = Book.select(:author).limit(10).offset(params[:page]*10)
# => [#<Book author: "first pair of authors">, #<Book author: "second pair of authors">, ...]