私は2つのモデルを持っています
class Foo < ActiveRecord::Base
# columns are
# max_spots
has_many :bars
end
class Bar < ActiveRecord::Base
# columns are
# a_id
belongs_to :foo
end
max_spots が関連するバーの数よりも大きいすべての Foo を取得する必要がありますが、次のように各 Foo を通過するのではなく、アクティブなレコードを介して行う必要があります。
class Foo
#bad
def self.bad_with_spots_left
all.select do |foo|
foo.max_spots - foo.bars.count > 0
end
end
#good but not working
def self.good_with_spots_left
joins(:bars).select('COUNT(bars.id) AS bars_count').where('max_spots - bars_count > 0')
end
end
カウンター キャッシュを foo に追加するだけでよいことはわかっていますが、それなしでこれを行う方法を知りたいだけです。ありがとう!