2009-07-26 4 views
1

Я пытаюсь создать связь между двумя моделями, используя условия соединения, а не внешний ключ. Кто-нибудь знает возможно ли это?Как указать условия соединения в Rails для bind_to для объединения?

Например, я хочу присоединиться к продуктам в точках оценки. У продукта есть цена, а точка ценообразования имеет минимальную и максимальную сумму и имя. Например. Min = 0, Max = 20, Name = Менее 20 долларов США. Связь между продуктом находится по цене, а мин и макс.

SELECT * 
FROM products 
INNER JOIN pricing_points 
ON pricing_points.minimum < products.price AND pricing_points.maximum >= products.price 

Имеет ли это смысл? Так что я хочу что-то подобное в моей модели:

class Product < ActiveRecord::Base 

    belongs_to :pricing_point, :join => "INNER JOIN pricing_points ON pricing_points.minimum < products.price AND pricing_points.maximum >= products.price" 

    ... 

end 

Заранее спасибо за вашу помощь,

Caps

ответ

0

Вы не можете определить, что тип отношений с использованием ActiveRecord. AR предоставляет опцию: conditions, но она применима только к части WHERE вашего запроса, она все равно попытается присоединиться к pricing_point_id = price_point.id.

Вы хотите сделать следующее:

Products.find :all, :joins => "INNER JOIN pricing_points \ 
    ON pricing_points.minimum < products.price \ 
    AND pricing_points.maximum >= products.price" 

Вы можете переместить это метод в классе продуктов для удобства.

Другой вариант - использовать для этого необработанный SQL.

+0

Да, я думал, что это может быть так. Я хотел сопоставить ассоциацию, потому что я использую Thinking Sphinx, и я хотел бы использовать ассоциацию в моем индексе поиска. Спасибо за вашу помощь. – Caps

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