搜索鑑於這些機型:軌道4,活動記錄嚴格的陣列,協會
class Farm < ActiveRecord::Base
has_and_belongs_to_many :animals
end
Class Animal < ActiveRecord::Base
has_and_belongs_to_many :farms
end
我需要尋找farms
有ducks
,pigs
和cows
但沒有cats
和dogs
。
這種查詢不起作用:
Animal.joins(:farms)
.where('animals.name IN ? AND animals.name NOT IN ?',
good_animal_names, bad_animal_names)
由於它搜索農場與任何動物。我需要搜索具有所有期望的農場而沒有其他農場的農場。
我也試圖與SQL像這樣的東西:
SELECT farms.id, farms.name
FROM farms
INNER JOIN animals_farms ON animals_farms.farm_id = farms.id
INNER JOIN animals ON animals_farms.animal_id = animals.id
WHERE animals.name IN (['ducks', 'pigs', 'cows'])
AND animals.name NOT IN (['dogs', 'cats'])
GROUP BY farms.id, farms.name
HAVING COUNT(unique(animals.name)) = 3
但我不知道,如果animals.name NOT IN
真的會排除農場有沒有動物或只養殖場沒有他們中的一個。真正的數據庫很難驗證結果。
此外,能夠在Active Record或Arel中執行查詢應該很棒,但SQL中的任何建議都非常值得歡迎。
數據庫是Oracle,我對Oracle沒有太多的經驗,但是大多數用PostgreSQL的查詢都在這裏工作。
謝謝,但哪裏是好動物? – 2014-12-19 01:13:04
它會列出除壞動物以外的所有其他動物是什麼意思。請嘗試在您的應用程序中運行 – uday 2014-12-19 01:16:39
第二種方法:'Farm.joins(:animals).where(animals:{name:good_animal_names})' – uday 2014-12-19 02:43:43