Rails嵌套/多级AREL查询

时间:2013-03-11 03:58:30

标签: ruby-on-rails ruby-on-rails-3 arel

我有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内找到TiersetFeature个对象中所有F_VIZ个对象的Tier对象Tierset 1}}。

我尝试过一系列组合:包含在AREL查询中,但我显然已经混淆了表的连接方式。非常感谢任何帮助。

1 个答案:

答案 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'根据您的关联设置方式'知道'功能和层之间的隐式连接表。