残念ながら、ShivamD の回答では十分ではありません。これには duplicate が必要Skills
であり、関連する via 関係を照会しUser.help_requests
ますが、代わりに交差点が必要です。
それだけでなく、Users
作成HelpRequests
する人にはすでにhas_many
関係があります。それは理にかなっている。
HABTM
これから提案する (ここを参照)のスキーマは含めませんが、モデルについては説明します。基本的にあなたが望むもの:
skill = Skill.create(name: "My Skill")
user.skills << skill
help_request.skills << skill
user.matched_help_requests
#> [help_request]
これは次のように達成できます。
class User
has_and_belongs_to_many :skills
def matched_help_requests
HelpRequest.joins(:skills).where("skills.id IN(?)", skills.pluck(:id))
end
end
class HelpRequest
has_and_belongs_to_many :skills
end
class Skill
has_and_belongs_to_many :users
has_and_belongs_to_many :help_requests
end
編集:ここにのシュメアがありHABTM
ます:
rails g migration add_skills_join_tables
移行内
def change
create_table :skills_users, id: false do |t|
t.references :skill
t.references :user
end
create_table :help_requests_skills, id: false do |t|
t.references :skill
t.references :help_request
end
add_index :skills_users, [:skill_id, :user_id]
add_index :help_request_skills, [:skill_id, :help_request_id]
end