Как выбрать объект и счетчик вместе в Rails 3 Active Record Query? - PullRequest
2 голосов
/ 25 июня 2011

Как мне сделать что-то подобное в активном запросе?

select product.*, count(product_id) AS product_counts
group by(product.*) 
order by product_counts;

Я пробовал это в активном запросе:

Product.select("product fields, count(product_id) AS product_counts").group("product fields").order(product_counts)

Набор результатов, который я получаю, содержит только продукты, отсортированные в правильном порядке подсчета, но без значения подсчета. Я сделал .to_sql, и он возвращает правильный sql.

Как я могу сделать это или что-то подобное, будучи эффективным на БД?

Еще один связанный с этим вопрос, как мне сделать .select("product.*) или .group("product.*") в активном запросе? Прямо сейчас я должен перечислить каждое поле, например. .group("product.id, product.name, product.price...etc")

1 Ответ

0 голосов
/ 21 декабря 2011

@ Кевин,

На самом деле вы получаете product_counts. Единственное, что нужно знать, это то, что виртуальные атрибуты не будут отображаться в консоли, поэтому, если у вас есть:

products = select product.*, count(product_id) AS product_counts
group by(product.*) 
order by product_counts;

#You can access the product_counts just as you would expect
products.first.product_counts

Вопрос 2: Не уверен, что вы пытаетесь достичь с помощью группы ("product. *"), Если вы хотите получить отдельные строки, вы можете использовать DISTINCT в вашем выборе, например. Product.select ("DISTINCT *")

...