У меня есть две моделейПолучения дешевых продуктов в категориях в рельсах эффективно
class Product < ActiveRecord::Base
belongs_to :category
end
class Product < ActiveRecord::Base
belongs_to :category
end
теперь я хочу, чтобы перечислить все категории с их дешевыми продуктами. Это очень легко сделать, получив все категории, итерации по ним и поиск дешевого продукта по отдельности, но это очень много запросов и очень медленно. Я могу сделать это довольно легко с SQL - что-то вроде
SELECT products.*, categories.*
FROM products
JOIN categories ON (categories.id = products.owner_id)
LEFT JOIN products as cheaper_products ON
cheaper_products.category_id = epochs.category_id AND
cheaper_products.price < products.price
WHERE cheaper_products.owner_id IS NULL
, который ола»SQL хороший трюк, где мы„LEFT JOIN“все более дешевый продукт в категории для каждого продукта, и чем принимать только эти, кто не имеет.
Я хотел бы знать, как что-то подобное можно сделать, используя отношения Rails3 - Я использую squeel, чтобы его можно было использовать.
Наблюдение: Я думал об определении отношения: cheaper_products on Products, но, похоже, это тоже не помогает.
Другая идея: Это также возможно решить с помощью подзапросов, возвращающих идентификаторы всех самых дешевых продуктов в их категории, но это не позволило мне решить (и менее элегантно).
Примечание: Я знаю, как это сделать с помощью bruteforce (selector_sql), но я бы очень хотел узнать больше рельсов. 3 способа сделать это.
любой, пожалуйста? – gorn
Я знаю, что это не то, о чем вы просите, но вы можете сделать индекс в db. Взгляните на http://www.postgresql.org/docs/current/static/indexes-expressional.html – Automatico