【发布时间】:2012-01-05 17:55:22
【问题描述】:
我有两个具有 HABTM 关联的 ActiveRecord 模型。
我想写一个scope 来使用 Arel 获取孤儿记录。
我的问题是我找不到检索关联的arel_table 的方法。由于关系是HABTM,因此没有模型可以调用arel_table。
我现在有以下内容(有效),但我使用连接表的名称创建了一个新的 arel 表(使用 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 而不是创建一个新的?
【问题讨论】:
-
注意,我认为有一种更简洁的方法可以做到这一点,请参阅下面的答案。
标签: sql ruby-on-rails ruby-on-rails-3 activerecord arel