0

RoRプロジェクトの写真の2つのモデルがあります

class Car < ActiveRecord::Base
  has_many :pictures, :as => :imageable, :dependent => :destroy
end

class Picture < ActiveRecord::Base
  belongs_to :imageable, :polymorphic => true, :dependent => :destroy
end

子供の写真だけですべての車を見つけるにはどうすればよいですか?

4

2 に答える 2

2

私はそれをテストしていませんが、そのようなものは単一のクエリでそれを作るだろうと思います。

class Car < ActiveRecord::Base
    has_many :pictures, :as => :imageable, :dependent => :destroy
    named_scope :with_child_picture, lambda { { 
        :joins => :pictures, 
        :group => "pictures.imageable_id", 
        :conditions => ["pictures.imageable_id != ?", nil] 
    } }
end

そして、あなたはそれをとして使うことができます

Car.with_child_picture

私はそれを自分でテストすることはできませんでした...しかし、少なくともそれがあなたにアイデアを与えることを願っています。

于 2010-06-21T15:10:00.107 に答える
0

これは厄介/遅くなる可能性がありますが、1つのオプションは、すべての車を繰り返し処理して、子供の数が並んでいるかどうかを確認することです。

good_cars = []
Cars.all.each do |car|
  if (car.pictures.count > 0 && car.pictures.count == Picture.find_by_car_id(car.id).count)
    good_cars << car
  end
end

または、パフォーマンスを向上させたい場合

good_cars = []
Cars.all.each do |car|
 if (car.pictures.count > 0)
    pic_count_for_car = Picture.count_by_sql(
      "SELECT COUNT(*) from pictures WHERE car_id = #{car.id}"
    )
    if (car.pictures.count == pic_count_for_car) 
      good_cars << car
    end
  end
end
于 2010-06-21T13:34:59.597 に答える