我遇到了使嵌套连接正常工作的问题。
我的表类似于:| 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
我不知道我做错了什么,任何帮助都会受到赞赏。 谢谢。