-1

Ruby on Rails 5(PostGres 9.5)アプリケーションに2つのモデルがあります。私はマシンのオブジェクトを検索したいので、私はモデルを検索するにはどうすればよいですか?少なくとも1つの子関連がある場合のみですか?

@results = Machine.where("name ILIKE ?", "%#{machine_name}%") 
       .order("LOWER(name)") 
       .paginate(:page => params[:page]) 

を持っていますが、注意点は、私が唯一の少なくとも一つを持つオブジェクトを返すようにしたいです

class Machine < ActiveRecord::Base 
    has_many :parts 

class Part < ActiveRecord::Base 
    belongs_to :machine 

を持っていますそれらに関連付けられたパートオブジェクト。私は分かりますか?

@results = Machine.joins(:parts) 
       .where("name ILIKE ?", "%#{machine_name}%") 
       .order("LOWER(name)") 
       .paginate(:page => params[:page]) 

しかし、これは実際には非効率的なものとして数万の関連があります。私のマシンオブジェクトを検索する最も効率的な方法は何ですか?ただし、少なくとも1つのパーツ関連がある場合のみですか?

答えて

0

更新:いくつかは、これを検索した後

は非常に簡単に私はパーツで100万台のマシンを持っている場合は、このcondiitonを行い

Machine.joins(:parts) 
.where('some condition') 
.group(:id) 
.having("count('parts.*') > 0") 
+0

を達成することができます - 」.where(ID:machine_ids) "PostGresに" WHERE ID IN(id1、... id1000000) "句を実行させますか? – Dave

+0

はい、そうです。それは超最適化されたバージョンではなく、ほとんどの状況でかなりうまく動作するものです。 – Iceman

+0

新しいバージョンが更新されました。 – Iceman

関連する問題