我对表连接有问题。ActiveRecord生成两次连接同一个表的SQL。假设我们有模型:
class Product < ActiveRecord::Base
has_many :characteristics
has_many :properties, through: :characteristics
has_many :values, through: :characteristics
end
class Value < ActiveRecord::Base
has_many :characteristics
end
class Property < ActiveRecord::Base
has_many :characteristics
end
class Characteristic < ActiveRecord::Base
belongs_to :product
belongs_to :property
belongs_to :value
end
所以我想同时连接属性和值。Product.joins(:properties).joins(:values)
将生成下一个SQL:
SELECT `products`.*
FROM `products`
INNER JOIN `characteristics` ON `characteristics`.`product_id` = `products`.`id`
INNER JOIN `properties` ON `properties`.`id` = `characteristics`.`property_id`
INNER JOIN `characteristics` `characteristics_products_join` ON `characteristics_products_join`.`product_id` = `products`.`id`
INNER JOIN `values` ON `values`.`id` = `characteristics_products_join`.`value_id`
表characteristics
有两个相同的联接。
我怎样才能避免这种情况?
发布于 2017-02-10 03:59:14
我正在寻找一个更优雅的解决方案,并偶然发现了这一点。但是这将会起作用,只是不像我希望的那样是Rails-y。
Product.joins(characteristics: :properties)
.joins('INNER JOIN `characteristics` `characteristics_products_join` ON `characteristics_products_join`.`product_id` = `products`.`id`')
.joins('INNER JOIN `values` ON `values`.`id` = `characteristics_products_join`.`value_id`')
https://stackoverflow.com/questions/28160956
复制相似问题