Боюсь, ответа ShivamD будет недостаточно. Для этого потребуется дублировать Skills
и запросить соответствующее отношение 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
person
Damien Roche
schedule
07.11.2013