私が望むのは、関連付けを通じてhabtm
関連付けられた「fra」言語のみを持つすべてのメディアを照会することです。現在、このクエリはMedia
、["fra", "eng"] のように "fra" を含むインスタンスを返します。Postgresを使用しています。
したがって、(1) 言語 'x' のみを含むメディアを見つけたい (2) 言語 'x' と 'y' を正確に含むメディアを見つける (3) 言語 'x' と 'y' を正確に含むメディアを見つける正確には言語「x」、「y」、「z」など。
class Media < ActiveRecord::Base
has_and_belongs_to_many :audio_language_records, :join_table => "audio_languages_media", :class_name => "Language"
end
class Language < ActiveRecord::Base
attr_accessor :code
end
私はこれを試しましたが、「fra」だけでなく「fra」を含むすべてのメディアを返します
Media.joins(:audio_language_records).where("languages.code = ? AND languages.code != ?", "fra", "eng")
以下は意図したとおりに機能せず、同じ結果を返します
Media.joins(:audio_language_records).where("languages.code IN (?) AND languages.code NOT IN (?)", ["fra"], ["eng"])