如何在Rails格式belongs_to关联中指定连接条件?

时间:2009-07-26 07:51:08

标签: ruby-on-rails activerecord join associations

我正在尝试使用连接条件而不是外键在两个模型之间创建关联。有谁知道这是否可行?

例如,我想将产品加入定价点。产品有价格,定价点有最小和最大金额和名称。例如。最小值= 0,最大值= 20,名称=小于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

先谢谢你的帮助,

上限

1 个答案:

答案 0 :(得分:0)

使用ActiveRecord无法真正定义这种关系。 AR提供:conditions选项,但它仅适用于查询的WHERE部分,它仍会尝试加入pricing_point_id = pricing_point.id。

您需要执行以下操作:

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

为方便起见,您可以将其移至Products类中的方法。

另一种选择是使用原始SQL。