以下は私のアプリケーションのモデルです。私は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」を使用することができ
このエラーが発生しています。私は会社とキーキルとの間に関連性がないからです。 ActiveRecord :: ConfigurationError:Companyで 'key_skills'という名前の関連付けが見つかりませんでした。おそらくあなたはそれを間違って綴ったでしょうか? – nekolus
はい、companyとkey_skillのモデルは、has_many key_skillsとkey_skillが企業に属しているため、関連付けを定義する必要があります –