恐怕 ShivamD 的回答还不够。这将需要重复的Skills,并通过关系查询相关的User.help_requests,而您需要一个交集。
不仅如此,创建HelpRequests 的Users 已经拥有has_many 关系。这是有道理的。
我不会包含我即将建议的HABTM 的架构(请参阅here),但我会介绍模型。基本上是你想要的:
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 的 schmea:
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