ฉันเกรงว่าคำตอบของ 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
แก้ไข: นี่คือ schmea สำหรับ 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