Rails从表中选择行,其中相关表的所有行都具有特定值

时间:2012-11-02 10:43:37

标签: sql ruby-on-rails activerecord

基本上我有3张桌子。忽略语法。我只想表达这个想法。

ModelA:
    belongs_to :ModelB

ModelB:
    has_many: ModelA
    has_and_belongs_to_many :ModelC

ModelC
    has_and_belongs_to_many :ModelB

如何获取ModelA中的所有行,其中ModelC的所有行都有flag ='Y'?
我试过了:

ModelA.joins(:ModelB => :ModelC).where("#{ModelC.table_name}.flag = 'Y'")

以及其他方式没有成功。我知道上面的代码没有检查所有的行,但这就是我所拥有的。我更喜欢使用ActiveRecord。

1 个答案:

答案 0 :(得分:0)

他们的解决方案可以解决你的问题但不是一个完美的问题

ModelA.all - ModelA.joins(:ModelB => :ModelC).where("#{ModelC.table_name}.flag != 'Y'")