我的Ruby on Rails 5(PostGres 9.5)应用程序中有两个模型。我有
class Machine < ActiveRecord::Base
has_many :parts
和
class Part < ActiveRecord::Base
belongs_to :machine
我想搜索Machine对象,所以我有
@results = Machine.where("name ILIKE ?", "%#{machine_name}%")
.order("LOWER(name)")
.paginate(:page => params[:page])
但需要注意的是,我只想返回至少有一个与之关联的Part对象的对象。我意识到我做了
@results = Machine.joins(:parts)
.where("name ILIKE ?", "%#{machine_name}%")
.order("LOWER(name)")
.paginate(:page => params[:page])
但我认为这是非常低效的,因为有成千上万的关联。搜索我的Machine对象的最有效方法是什么,但前提是它们至少有一个Part关联?
答案 0 :(得分:0)
<强>更新强>:
经过一番搜索后,可以通过
轻松完成Machine.joins(:parts)
.where('some condition')
.group(:id)
.having("count('parts.*') > 0")