не уверен, хорошо ли я понимаю вашу схему, но я думаю, что вам, по крайней мере, понадобится, чтобы ваш продукт принадлежал поставщику, поэтому вы можете отфильтровать таблицу продуктов по тому, какой поставщик ее предоставляет:
Product.find(:conditions => {:supplier_id => @sb.id})
Теперь вы можете:
- найти все продукты, ГДЕ идентификатор поставщика является идентификатором SC,
- ВНУТРЕННИМ СОЕДИНИТЬ их с их from_products,
- фильтровать строки ГДЕ from_products 'supplier_idэто идентификатор SB,
- и, наконец, выберите DISTINCT id для отфильтрованных строк, чтобы у вас был только один экземпляр SCPB.
поэтому фактический запрос SQL должен выглядеть следующим образом:
SELECT DISTINCT products.id, (etc...)
FROM products, product_sources
INNER JOIN product_sources
ON products.from_sources = product_sources.id
LEFT JOIN products AS source
ON product_sources.id = source.id
WHERE products.supplier_id = (SC's id) AND source.supplier_id = (SB's id)
Извините, но я не очень знаком с интерфейсом запроса rails 2 (rails 3 очень приятен), так что я могуне скажу больше, но я думаю, что это правильная логика.