0

私は3つのモデルを持っています:

Tiersets
  has_many Tiers

Tiers
  belongs_to Tierset
  has_and_belongs_to_many Features

Feature
  has_and_belongs_to_many Tiers

Featureには、次の文字列のいずれかを含むStringという名前の列Feature_Codeがあります: " F_VIZ"、 " F_DATA"、" F_SCORE"。

Tierset既知の範囲内で、そのすべてのFeatureオブジェクトにコードF_VIZを含むすべてのTierオブジェクトを検索するクエリを作成しようとしていTiersetます。

ARELクエリで:includesの組み合わせをたくさん試しましたが、テーブルの結合方法に明らかに混乱しています。どんな助けでも大歓迎です。

4

1 に答える 1

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は、関連付けの設定方法に基づいて、機能と層の間の暗黙的な結合テーブルを認識しているため、これは少しわかりやすくなっています。

于 2013-03-11T04:42:25.560 に答える