Выбор из нескольких таблиц в Rails - PullRequest
3 голосов
/ 12 октября 2010

Скажем, у меня есть яблоки, апельсины и дыни, и у каждого есть столбец "made_at".Как мне создать ActiveRecord / SQL-запрос, чтобы найти 10 самых свежих яблок, апельсинов и дынь?Есть ли элегантный способ сделать это?

Ответы [ 2 ]

2 голосов
/ 12 октября 2010

Если у вас есть эти типы в отдельных таблицах, то я не думаю, что вы можете сделать это в одном запросе SQL.

Вы можете найти идентификаторы и типы самых последних записей, например:

SELECT * FROM
(SELECT 'Apple' AS class, id, created_at FROM apples LIMIT 10
UNION
SELECT 'Orange' AS class, id, created_at FROM oranges LIMIT 10
UNION
SELECT 'Melon' AS class, id, created_at FROM melons LIMIT 10) AS most_recent
ORDER BY created_at
LIMIT 10;

Затем используйте эти записи для выборки определенных объектов по идентификатору.

Но если вы можетепопробуйте сохранить все это в одной таблице, используя шаблон наследования одной таблицы, который встроен в рельсы .Это будет работать нормально, если типы разделяют много полей.Тогда вы можете просто использовать один вызов Fruit.find с order и limit, чтобы получить то, что вы хотите.

В Rails 2:

Fruit.find(:all, :order => "created_at", :limit => 10)
0 голосов
/ 10 января 2013

Не проверено, но это должно работать

Apples.joins(:oranges).joins(:melons).order("apples.created_at,oranges.created_at,melons.created_at DESC").limit(10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...