2017-02-26 73 views
0
class Project < ActiveRecord::Base 
has_many :photos, -> { order(main: :desc, id: :asc) }, as: :photoable, class_name: 'Photo', dependent: :destroy 

class Photo < ActiveRecord::Base 
    belongs_to :photoable, polymorphic: true 

projects = Project.limit(10).includes(:photos) 

SELECT "projects".* FROM "projects" WHERE "projects"."is_deleted" = $1 LIMIT 10 [["is_deleted", "f"]] 
Photo Load (0.5ms) SELECT "photos".* FROM "photos" WHERE "photos"."photoable_type" = 'Project' AND "photos"."photoable_id" IN (1, 403, 371, 8784, 12, 34, 11, 1111, 31, 22) ORDER BY "photos"."main" DESC, "photos"."id" ASC 

projects.first.photo 
Photo Load (0.6ms) 

它发送其获取(0.6ms)执行的数据库查询。任何想法如何我可以避免数据库查询?Rails的预加载不与多态关系工作

我用Rails 4.2.6 &红宝石2.3.1p112

回答

0
projects = Project.includes(:photos).limit(10) 

然后通过迭代的项目。它不会触发另一个查询。

projects.each do |project| 
    project.photo 
end