我有3个型号:
Tiersets
has_many Tiers
Tiers
belongs_to Tierset
has_and_belongs_to_many Features
Feature
has_and_belongs_to_many Tiers
在Feature
中,我有一个名为String
的{{1}}列,其中包含以下字符串之一:“Feature_Code
”,“F_VIZ
”,“ F_DATA
”。
我正在尝试构建一个查询,以便在已知F_SCORE
内找到Tierset
个Feature
个对象中所有F_VIZ
个对象的Tier
对象Tierset
1}}。
我尝试过一系列组合:包含在AREL查询中,但我显然已经混淆了表的连接方式。非常感谢任何帮助。
答案 0 :(得分:1)
您想要的SQL是
select * from features, features_tiers, tiers where features_tiers.id = features.id and features_tiers.tier_id = tiers.id and features.code = 'F_VIZ' AND tierset_id = ?;
所以我们将把它直接翻译成ActiveRecord:
Feature.joins(:tiers).where(:code => 'F_VIZ', 'tiers.tierset_id' => 1)
哪个更清洁,因为AR'根据您的关联设置方式'知道'功能和层之间的隐式连接表。