我有很多Farms
,每个农场都有很多animals
。我需要找到每个有超过5只动物的农场。
我需要一些与此相符的东西......:
Farm.where(animals.count > 5)
更新/答案:
Farm.joins(:animals).group("farm_id").having("count(farm_id) > 5")
答案 0 :(得分:8)
尝试:
Farm.joins(:animals).group("farm.id").having("count(animals.id) > ?",5)
答案 1 :(得分:5)
考虑在Farm上实施counter_cache - >动物
class Farm < ActiveRecord::Base
has_many :animals
end
class Animal < ActiveRecord::Base
belongs_to :farm, counter_cache: true
end
不要忘记将animals_count
(整数)添加到farms
表格。
class AddAnimalCounterCacheToFarm < ActiveRecord::Migration
def up
add_column :farms, :animals_count, :integer
# if you need to populate for existing data
Farm.reset_column_information
Farm.find_each |farm|
farm.update_attribute :animals_count, farm.animals.length
end
end
def down
remove_column :farms, :animals_count
end
end
寻找有5个或更多动物的农场
Farm.where("farms.animals_count >= 5")