การอ้างอิงข้อมูลอื่นจากรุ่นอื่น

ฉันต้องการความช่วยเหลือเกี่ยวกับการดึงข้อมูลจากรุ่นอื่นและความช่วยเหลือในการอ้างอิงที่เหมาะสมใน Rails ตัวอย่างเช่น ฉันมีแอป Rails ที่เก็บข้อมูลการแข่งขัน ที่นี่ฉันมีรถยนต์ คลาสรถ กิจกรรม และการแข่งรถ ฉันมีความสามารถในการสร้างรถที่เป็นส่วนหนึ่งของ Car Class แต่ฉันไม่รู้ว่าจะทำอย่างไรในส่วนของกิจกรรมและการแข่งรถ ฉันหวังว่าทั้งหมดนี้สมเหตุสมผลเพราะฉันยังคงพยายามคลุมศีรษะด้วยตัวเอง ฉันใช้ Rails เวอร์ชัน 4.1.6

นอกจากนี้ หากใครสามารถตั้งชื่อหัวข้อที่ดีกว่าสำหรับคำถามนี้ได้ ฉันจะยินดีเป็นอย่างยิ่ง

คลาสรถยนต์: นี่คือคลาสที่เป็นของรถยนต์ รถทุกคันต้องอยู่ในคลาส นี่ควรเก็บข้อมูลทั้งหมดเกี่ยวกับคลาสรถ

รุ่น:

class CarClass < ActiveRecord::Base
  has_many :cars
end

รถยนต์: รถยนต์อยู่ในประเภทเดียวกับที่คุณเห็นในรุ่นสำหรับ CarClass และ Car นี่ควรเก็บรายละเอียดทั้งหมดเกี่ยวกับรถยนต์ไว้

รุ่น:

class Car < ActiveRecord::Base
      belongs_to :car_class
 end

กิจกรรม: งานคือที่คลาสรถจะแข่งขันกัน โดยจะเก็บรายละเอียดกิจกรรมไว้ อย่างไรก็ตาม รายละเอียดคลาสและรถจะอยู่ที่ CarClass และ Car ตามที่กล่าวไว้ข้างต้น น่าจะสามารถรับรายชื่อรถทั้งหมดภายในงานได้ ฉันคิดว่า Event จะมี Racing มากมาย


การแข่งรถ ควรเก็บสถิติเกี่ยวกับการแข่งขันเป็นรายคัน เช่น สถานที่ที่พวกเขาเข้ามา ติดตามเวลา ฯลฯ ฉันถือว่า Racing จะเป็นของ Event


person Seldon Stone    schedule 26.01.2015    source แหล่งที่มา
comment
class Car ‹ ActiveRecord::Baseเป็นของ_to :cars end ไม่สามารถเป็นของตัวเองได้   -  person neo    schedule 27.01.2015
comment
ขอบคุณสำหรับความช่วยเหลือ Neo ฉันได้แก้ไขปัญหาแล้ว   -  person Seldon Stone    schedule 27.01.2015


คำตอบ (1)


นี่เป็นสถานการณ์ has_many through: ที่ค่อนข้างคลาสสิก ซึ่งเป็นความสัมพันธ์แบบกลุ่มต่อกลุ่มระหว่างทั้งสองโมเดลโดยมีโมเดลระดับกลางทำหน้าที่เป็นตารางรวม การใช้โมเดลแยกต่างหากที่นี่สำหรับตารางรวมจะช่วยให้คุณสามารถจัดเก็บข้อมูลเพิ่มเติมสำหรับการแข่ง ไม่ใช่แค่การเชื่อมต่อระหว่างรถและกิจกรรมต่างๆ

คุณสามารถทำสิ่งต่อไปนี้:

class Racing < AR::Base
  belongs_to :car
  belongs_to :event
end

class Event < AR::Base
  has_many :racings
  has_many :cars, through: :racings
end

class Car < AR::Base
  has_many :racings
  has_many :events, through: :racings

  belongs_to :car_class 
end

class CarClass < AR::Base
  has_many :cars
end

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับการเชื่อมโยงของ Rails ในคำแนะนำ .

ซึ่งจะช่วยให้คุณเข้าถึงกิจกรรมจากรถยนต์และในทางกลับกัน ด้วยวิธีนี้คุณจึงสามารถเข้าถึงคลาสรถจากกิจกรรมได้ ตัวอย่างเช่น คลาสของรถคันแรกของกิจกรรมแรก:

Event.first.cars.first.car_class

เมื่อคุณวนซ้ำการเชื่อมโยงต่างๆ อย่าลืมใช้ includes ตามความเหมาะสม

person tmichel    schedule 26.01.2015
comment
Car Class จะมีบทบาทอย่างไรในเรื่องนี้? ฉันถือว่ารถยนต์ยังคงอยู่ belongs_to car_class ใช่ไหม? - person Seldon Stone; 27.01.2015
comment
ฉันแน่ใจว่านี่อาจจะถูกต้อง ดังนั้นฉันจะทำเครื่องหมายว่าเป็นคำตอบ คุณรู้ไหมว่าฉันจะทำแบบฟอร์มกิจกรรมนี้อย่างไร? ตัวอย่างเช่น หากฉันเลือกคลาสรถในกิจกรรม ฉันต้องการให้เพิ่มรถทั้งหมดจากคลาสรถนั้นลงใน racing และรวมไว้ภายใต้กิจกรรมนั้น ตอนนี้ฉันคิดได้แต่ว่าบางที for @cars.each ทำ แล้ววนรถทุกคันในคลาสนั้นและเพิ่มทีละคัน..แต่นี่ดูเหมือนจะไม่ถูกต้องสำหรับฉัน ดูเหมือนเป็นอีกคำถามหนึ่ง...โปรดแจ้งให้ฉันทราบว่าควรสร้างหรือไม่ - person Seldon Stone; 29.01.2015
comment
ใช่นี่อาจเป็นคำถามแยกต่างหาก เมื่อคุณสร้างกิจกรรม คุณก็สามารถทำได้ event.cars << car_class.cars ดู: api.rubyonrails.org/classes/ ActiveRecord/สมาคม/ - person tmichel; 29.01.2015