Activerecord检查是否存在关联

时间:2014-07-29 07:24:07

标签: ruby activerecord

我有两个ActiveRecord模型:

class Class < ActiveRecord::Base
    (...)
    has_many :class_to_teacher, dependent: :destroy
end

class Teacher < ActiveRecord::Base
    has_many :classes,
          through: :class_to_teacher
end

class ClassToTeacher < ActiveRecord::Base
     belongs_to :klass
     belongs_to :teacher
end

当我删除Class I时,不要完全删除它,只有我从ClassToTeacher记录中删除记录。我需要保留这些数据:

def leave(class, teacher)
    teacher.klasses.delete(class)
end

现在我必须得到所有相关的类(包含ClassToTeacher中记录的类)。怎么做到最好?谢谢你的所有答案。

2 个答案:

答案 0 :(得分:0)

你应该尝试类似的东西:

 Class.includes(:class_to_teacher).where('class_to_teacher.id is not null').references(:class_to_teacher).all

假设你有一个&#39; id&#39;数据库中ClassToTeacher的字段

答案 1 :(得分:0)

我想有很多方法可以实现,但最简单的方法可能就是:

Klass.where(id: KlassToTeacher.select(:klass_id))

这将导致带有子查询的单个查询。请注意,我更改了模型的名称,因为已经在Ruby中定义了Class,而您只是在寻找麻烦。