すいません、タイトルをできるだけわかりやすく書こうとしたのですが意味不明になってしまいこれ以上うまく書けませんでした。

Phraseという自分自身をTranslationをいう名前のクラスがあり、そのクラスがhas_manyVoiceというクラスを持つのですが、特定のPhraseTranslationが存在し、そのVoiceが一つもない要素を取得したいのですがクエリがかけずに躓いています。

app/models/phrase.rb

class Phrase < ActiveRecord::Base
  has_many :translatabilities
  has_many :translations, through: :translatabilities
  has_many :voices
end

app/models/translatability.rb

class Translatability < ActiveRecord::Base
  belongs_to :phrase
  belongs_to :translation, :class_name => 'Phrase'
end

以下の様なクエリを試してみたのですが、これではTranslationとして取得したモデルのVoiceが一つもなくてもPhrase側のVoiceが存在すると取得対象外になってしまいます。

Phrase.includes(:translations).
    where.not(translatabilities: {phrase_id: nil}).
    includes(:voices).where(voices: {phrase_id: nil})

どのようにすれば「Translationsが存在し、そのどのTranslationVoice持たない」要素をとってこれるでしょうか?

Rubyの式で書くと

phrase.translations.present? && phrase.translations.all?{|t| t.voices.empty? }

が真になる要素を抜き出したいです。