1

この質問のnoobeeの性質を許してください。

ストーリーモデルがあります。各ストーリーには、独自のDB列に格納されたカテゴリ属性があります。:in_categoriesという名前のスコープがあります。これは、特定のカテゴリ配列に含まれるカテゴリを持つすべてのストーリーを返します。

  scope :in_categories, lambda {|categories|
        where(:category => categories)
  }

私が今やりたいのは、応答の長さを制限することですが、制限を無視して、DB内の応答行の総数のカウントも返します。たとえば、スコープを次のように変更したとします。

  scope :in_categories, lambda {|categories|
        where(:category => categories).limit(20)
  }

しかし、実際には、categories配列に1つのカテゴリがある35のストーリーがあります。20個のアクティブなレコードオブジェクトと35個のカウント変数を取り戻すにはどうすればよいですか?2番目のDBクエリが必要ですか?mysqlでFOUND_ROWS_関数に出くわしましたが、postgresqlを使用しています。

4

1 に答える 1

1

http://www.postgresql.org/message-id/1185863074.10580.91.camel@linda.lfix.co.ukをご覧ください

同等のものはありません。使用する

BEGIN;
SELECT * FROM mytable OFFSET X LIMIT Y;
SELECT COUNT(*) AS total FROM mytable;
END;

(一貫した結果を保証するには、両方のクエリを1つのトランザクションで実行する必要があります。)

手元にrailsenvがないため、擬似コードのみ

Story.transaction do
  story.in_categories
  story.where(:category => categories).count
end

アクティブレコードトランザクションの詳細http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

実際には、トランザクションを使用せず、これらのクエリを順番に実行するだけです。それで問題が発生したことはありませんが、もちろんそれはあなたのプロジェクトに依存します。

于 2013-02-25T18:58:28.550 に答える