2013-02-25 2 views
1

Извините, что у вас нет прав на этот вопрос.Возврат счета found_rows вместе с результатами запроса активных активных записей

У меня есть модель «История». Каждая история имеет атрибут категории, хранящийся в его собственной колонке БД. У меня есть именованный масштаб называется: in_categories, который возвращает все истории, которые имеют категорию, которая включена в данной категории массиве:

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

Что теперь я хочу сделать, это предел длиной ответа, но также возвращают счетчик общего числа строк ответа в БД, игнорируя предел. Так, например, сказать, что я изменил масштаб быть:

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

но есть на самом деле 35 историй, которые имеют категорию в категории массива. Как я могу вернуть 20 активных объектов записей и переменную count из 35? Нужно ли иметь второй запрос БД? Я столкнулся с функцией FOUND_ROWS_ в mysql, но я использую postgresql.

ответ

1

взглянуть на http://www.postgresql.org/message-id/[email protected]

Там нет эквивалента. Используйте

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

(Для того, чтобы обеспечить стабильные результаты, оба запроса должно быть сделано в одной сделки.)

не рельсы окр на руке поэтому только псевдокоде

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

больше информации об активных транзакциях записи http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

На самом деле мы не используйте транзакции и просто выполняйте эти запросы последовательно. Никогда не было проблем с этим, но, конечно, это зависит от вашего проекта.

+0

OK. В этом есть смысл. Но как мне создать эти запросы внутри контроллера rails, чтобы я мог получить доступ к обоим ответам, сохраняя при этом неизменные результаты? –

+0

Я действительно хотел бы принять ваш ответ, но мой первоначальный вопрос задает вопрос, как это сделать в контексте active_records. Я не понимаю, как делать оба запроса внутри одной транзакции AR, или если это возможно. Можете ли вы расширить? –

+0

Обновлен мой ответ. если у вас больше вопросов, пишите мне. – Alexeyss

Смежные вопросы