Ruby on Rails:嵌套连接查询问题

时间:2017-10-20 20:22:30

标签: ruby ruby-on-rails-4

我遇到了使嵌套连接正常工作的问题。

我的表类似于:| id | type | some_data | parent_id |

然后在Rails中定义此表,如下所示:

class Table < ActiveRecord::Base
end

class Type1 < Table
  has_many :type2s, foreign_key: :parent_id, class_name: Type2
end

class Type2 < Table
  has_many :type3s, foreign_key: :parent_id, class_name: Type3
  belongs_to :type1, foreign_key: :parent_id, class_name: Type1
end

class Type3 < Table
  belongs_to :type2, class_name: Type2, foreign_key: :parent_id
end

我试图根据Type3的输入获取Type1值。所以

Type1.joins(type2s: :type3s).where(type3s: { id: type3s_ids })

但是生成的查询似乎在(...)中硬编码“type3s”。“id”,而将表别名为type3_SCHEMA_TABLE。例如:

SELECT "SCHEMA"."TABLE".* FROM "SCHEMA"."TABLE" 
INNER JOIN "SCHEMA"."TABLE" "type1_SCHEMA_TABLE" ON "type1_SCHEMA_TABLE"."PARENT_ID" = "SCHEMA"."TABLE"."ID" AND "type1_SCHEMA_TABLE"."TYPE" IN ('Type1')
INNER JOIN "SCHEMA"."TABLE" "type2_SCHEMA_TABLE" ON "type2_SCHEMA_TABLE"."PARENT_ID" = "type1_SCHEMA_TABLE"."ID" AND "type2_SCHEMA_TABLE"."TYPE" IN ('Type2')
INNER JOIN "SCHEMA"."TABLE" "type3_SCHEMA_TABLE" ON "type3_SCHEMA_TABLE"."PARENT_ID" = "type2_SCHEMA_TABLE"."ID" AND "type2_SCHEMA_TABLE"."TYPE" IN ('Type3') AND "TYPE3S"."ID" IN (...);

从上面可以看出,生成的查询使用“TYPE3S”。“ID”而不是“type3_SCHEMA_TABLE”。“ID”。

如果我尝试这样做,我也会遇到同样的事情:     Type1.joins(:type2s).where(type2s:{id:...})

奇怪的是:

Type1.first.type2s #<< works
Type2.first.type3s #<< works
Type3.first.type2 # << works
Type3.first.type2.type1 # << works

我不知道我做错了什么,任何帮助都会受到赞赏。 谢谢。

0 个答案:

没有答案