【发布时间】:2012-05-01 12:25:58
【问题描述】:
我有一个具有 has_many 关系的模型,以及确定它是否有任何子级的范围,例如:
scope :with_nomination, :include => [:nomination], :conditions => "nominations.service_id IS NOT NULL"
使用它,我可以执行Service.with_nomination 之类的操作,并收到一份包含提名儿童的所有服务列表。
问题是,当我在本质上执行Service.select("id, firstName, lastName").with_nomination ActiveRecord 之类的操作时,SELECT * FROM services 非常糟糕并且没有使用我煞费苦心设置的索引。
如何改写我的查询或修改我的范围以使用 .select() 命令?
【问题讨论】:
-
我不是这方面的专家,并且会听从其他人的意见以提供真实的答案,但我认为您需要先对您的范围进行 join 或 lambda,然后才能使用 select以您希望的方式。我以前在 github 上的源代码中看到过它,但我自己还没有实现它。只是在等待更好的答复时的想法。
标签: mysql ruby-on-rails optimization named-scope