1

私は3つのモデルを持っています

class Project < ApplicationRecord
  has_many :project_skills
  has_many :skills, :through => :project_skills
end

class Skill < ApplicationRecord
  has_many :project_skills
  has_many :projects, :through => :project_skills
end

class ProjectSkill < ApplicationRecord
  belongs_to :skill
  belongs_to :project
end

一連のスキルを含むすべてのプロジェクトを検索する検索を作成したいと考えています。

例えば:

  • project1 スキル: java、ruby、html
  • project2 スキル: ruby​​、c++。

したがって、「ruby」を検索すると、結果は project1 と project2 になるはずです。

4

3 に答える 3

1

このメソッドを使用するincludesと、ActiveRecord の自由がテーブルを結合する最適な方法を決定できるようになります。また、これはスコープの良い候補のようです。スキルは field を使用して名前が付けられていると想定していますがname、実際に使用するフィールドに置き換えてください。

class Project < ApplicationRecord
  has_many :project_skills
  has_many :skills, :through => :project_skills

  scope :having_skill, -> (required_skill) { includes(:skills).where(skills: {name: required_skill}) }

end

これで、次のことができます。

>> projects = Project.having_skill('ruby')

そして、結果セットを含む ActiveRecord Relation を取得します。

于 2017-07-23T17:37:27.133 に答える