Mah*_*ver 5 sql activerecord ruby-on-rails arel ruby-on-rails-3
我有两个ActiveRecord有HABTM关联的模型.
我想写一个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))
}
Run Code Online (Sandbox Code Playgroud)
这会产生以下SQL:
SELECT `teachers`.*
FROM `teachers`
WHERE (`teachers`.`id` NOT IN (SELECT `groups_teachers`.`teacher_id`
FROM `groups_teachers` ))
Run Code Online (Sandbox Code Playgroud)
那么有没有更好的方法来检索arel_table而不是创建一个新的?
不幸的是,我相信您的解决方案几乎是目前最干净的解决方案,事实上,这就是关联本身在实例化时在内部所做的事情:
我相信他们使用的reflection.join_table与reflection.options[:join_table]目前仅在master中。
| 归档时间: |
|
| 查看次数: |
1572 次 |
| 最近记录: |