2017-12-02 9 views
0

以下は私のアプリケーションのモデルです。私はkeyskillsと一致するすべての企業を見つけることを試みています。例えば。検索ボックスにjavaと入力すると、マッチしているすべての企業とkeyskillsを取得する必要があります。n + 1つの質問のレール、必要な解決

class User < ActiveRecord::Base 
    has_one :company 
end 

class Company < ActiveRecord::Base 
    has_many :jobs 
    belongs_to :user 
end 

class Job < ActiveRecord::Base 
    belongs_to :company 
    has_many :key_skills, dependent: :destroy 
    accepts_nested_attributes_for :key_skills, reject_if: :all_blank, allow_destroy: true 
end 

class KeySkill < ActiveRecord::Base 
    belongs_to :job 
end 

私はある次のステップ午前、

STEP1:入力した単語に一致するすべてのkeyskillsを検索します。 (例:javaの)私は仕事とkeyskillsとの関連性を持っているので

@matched_keyskills = KeySkill.where('name like ?','java') 

は、そのジョブbelongs_toの仕事にhas_many key_skillsとkey_skillsです。私は反復することができます @ matched_keyskill.each do | k | k.job.company end

と会社の記録を取得します。しかし、私はこのメソッドを試してみると、n + 1というクエリにもなり、会社名も繰り返されています。

ショーページに表示されている会社名のみを取得して、それに関連するジョブを示す会社をクリックする方法がありますか。 親切にも私に教えてくれるのは、dbモデルとアソシエーションが正しいinorderであることです。あなたは、n + 1クエリ削除するには、「ジョイン」と「inclue」を使用することができ

答えて

1

はこれを試してみてくださいをあなたは必要に応じて、それはあなたのすべての企業のリストが表示されます。

Company.joins(key_skill: :job).where('key_skill.name like ?','java') 

あなたは熱心な読み込みを使用することもできます。

http://railscasts.com/episodes/22-eager-loading

+0

このエラーが発生しています。私は会社とキーキルとの間に関連性がないからです。 ActiveRecord :: ConfigurationError:Companyで 'key_skills'という名前の関連付けが見つかりませんでした。おそらくあなたはそれを間違って綴ったでしょうか? – nekolus

+0

はい、companyとkey_skillのモデルは、has_many key_skillsとkey_skillが企業に属しているため、関連付けを定義する必要があります –