0

私の 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::RelationpluckArel メソッド呼び出しチェーンを使用できるようにする代替手段はありますか? ActiveRecord::Relationあるいは、配列の代わりにpluck を返すようにする方法はありますか?

4

1 に答える 1

3

これを試して:

@authors = Book.limit(10).offset(params[:page]*10).all_authors
# => ["first pair of authors", "second pair of authors", ...]

pluckチェーンの最後でメソッドを呼び出すだけです。

それ以外の場合selectは、データベースから指定された列のみを返す which を使用できます。

@authors = Book.select(:author).limit(10).offset(params[:page]*10)
# => [#<Book author: "first pair of authors">, #<Book author: "second pair of authors">, ...]
于 2013-05-22T13:51:17.603 に答える