首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails ActiveRecord将同一个表联接两次

Rails ActiveRecord将同一个表联接两次
EN

Stack Overflow用户
提问于 2015-01-27 07:51:39
回答 1查看 1.3K关注 0票数 5

我对表连接有问题。ActiveRecord生成两次连接同一个表的SQL。假设我们有模型:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
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有两个相同的联接。

我怎样才能避免这种情况?

EN

回答 1

Stack Overflow用户

发布于 2017-02-10 03:59:14

我正在寻找一个更优雅的解决方案,并偶然发现了这一点。但是这将会起作用,只是不像我希望的那样是Rails-y。

代码语言:javascript
运行
复制
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`')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28160956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档