То, что я хочу, - это запрос для всех носителей, которые имеют только «fra» язык, связанный с ассоциацией habtm
. В настоящее время этот запрос возвращает Media
экземпляры, которые включают «fra», так, например, ["fra", "eng"]. Я использую Postgres.Все включено, если включено, если и только если запрос не работает с Rails и Postgres
Итак, (1) Я хочу найти носитель, который имеет ровно язык «х» и ни один другой, (2) найти носитель, который имеет именно языки «х» и «у», (3) найти СМИ, что имеет точно Языков «х», «у» и «г» и т.д.
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»
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"])
Было бы полезно, если бы вы могли разместить SQL, сгенерированный при выполнении ваших запросов. –
Вы уверены, что 'languages.code =? AND languages.code! =? 'Работает с MySQL? –
@rocket, SQL из первого запроса '' SELECT "media". * FROM "media" INNER JOIN "audio_languages_media" ON "audio_languages_media". "Media_id" = "media". "Id" INNER JOIN "Языки" ON "языки "." id "=" audio_languages_media "." language_id "WHERE (languages.code = 'fra' AND languages.code! = 'eng')" ' – chinshr