私は、HABTM関連を有する2つのモデルを持っています。habtm関連のarelテーブルを取得するには?
Arelを使用して孤児レコードを取得するには、scope
と書いておきたいと思います。
私の問題は、関連のarel_table
を取得する方法が見つかりませんでした。関係はHABTMなので、arel_table
と呼ぶモデルはありません。
私は次のようになりました(動作します)が、私は新しいテーブルを作成します(reflect_on_association
メソッドを使用して取得した結合テーブルの名前)。
scope :orphans, lambda {
teachers = arel_table
join_table = Arel::Table.new(reflect_on_association(:groups).options[:join_table])
join_table_condition = join_table.project(join_table[:teacher_id])
where(teachers[:id].not_in(join_table_condition))
}
これは、次のSQLを生成します:
SELECT `teachers`.*
FROM `teachers`
WHERE (`teachers`.`id` NOT IN (SELECT `groups_teachers`.`teacher_id`
FROM `groups_teachers`))
は、だからではなく、新しいものを作るのarel_table
を取得するための任意のより良い方法はありますか?
メモ、これを行うには、よりクリーンな方法があると思う、以下の私の答えを参照してください。 – Andrew