2015-12-21 40 views
1

我想在轨道做一个半复杂的查询,我想找出一种方法来做到这一点在轨道上没有运行原始的SQL。它是如何工作的,我有一个类的列表,它与名为days的表连接,每个类都有多个运行日期。如何做一个不存在的加入轨道

我想查询一下我给出的日期列表,例如星期一和星期四星期一,它会给我一个列出所有运行日期都在给定列表中的类列表。

我有我可以使用的原始的SQL,但我无法弄清楚如何将这个变成一个rails命令。

select * from webtms_classes c 
where c.class_id = 'CHEM101' 
and not exists (
    select cd.day from webtms_days cd 
    where cd.webtms_class_id = c.id 
    and cd.day not in ('Monday','Tuesday','Thursday') 
) 

继承人什么型号有:

class WebtmsClass < ActiveRecord::Base 
    has_many :webtms_days, dependent: :destroy 
end 

class WebtmsDay < ActiveRecord::Base 
    belongs_to :webtms_class 
end 

有什么建议?

+0

你可以把你的代码中的模型,以显示你是如何设计的关联? – Yang

+0

@Yang ok更新 –

+0

考虑在获取所有这些类之后过滤Ruby中的类。我没有看到一个不涉及编写SQL或Arel的好解决方案。 – Raffael

回答

3

您可以使用阿雷尔

“不存在”
days = WebtmsDay.arel_table 
other_days = days[:day].not_in(['Monday', 'Tuesday', 'Thursday']) 

WebtmsClass.where(WebtmsDay.where(other_days).exists.not)