Merujuk Data Lain dari Model Lain

Saya memerlukan bantuan untuk mengambil data dari model lain dan bantuan referensi yang tepat di Rails. Misalnya saya memiliki aplikasi Rails yang menyimpan informasi balapan. Di sini saya memiliki Mobil, Kelas Mobil, Acara, dan Balapan. Saya memiliki kemampuan untuk membuat mobil yang merupakan bagian dari Kelas Mobil, namun saya tidak tahu bagaimana saya akan melakukan bagian Acara dan Balapan. Saya harap ini semua masuk akal karena saya sendiri masih mencoba memahaminya. Saya menggunakan Rails versi 4.1.6.

Juga jika seseorang dapat memberikan judul yang lebih baik untuk pertanyaan ini, saya akan sangat menghargainya.

Kelas Mobil: Ini adalah kelas yang dimiliki sebuah mobil. Semua mobil harus berada dalam satu kelas. Ini harus menampung semua informasi tentang kelas mobil.

Model:

class CarClass < ActiveRecord::Base
  has_many :cars
end

Mobil: Mobil termasuk dalam kelas seperti yang Anda lihat pada model untuk CarClass dan Car. Ini harus memuat semua detail tentang mobil.

Model:

class Car < ActiveRecord::Base
      belongs_to :car_class
 end

Acara: Sebuah acara adalah tempat kelas mobil akan berlomba. Ini akan menyimpan rincian acara, namun rincian kelas dan mobil akan dipegang oleh CarClass dan Car seperti yang disebutkan di atas. Daftar semua mobil untuk acara tersebut seharusnya bisa diperoleh. Saya berasumsi Event akan memiliki banyak Racing.


Balapan Ini harus menyimpan statistik tentang balapan per mobil. Misalnya di mana mereka datang, waktu pelacakan, dll. Saya berasumsi Racing akan menjadi milik Event.


person Seldon Stone    schedule 26.01.2015    source sumber
comment
kelas Mobil ‹ ActiveRecord::Base milik_to :mobil berakhir tidak dapat menjadi miliknya sendiri   -  person neo    schedule 27.01.2015
comment
Terima kasih atas bantuan Anda Neo, saya telah memperbaiki masalahnya.   -  person Seldon Stone    schedule 27.01.2015


Jawaban (1)


Ini adalah situasi has_many through: yang cukup klasik. Yaitu hubungan banyak ke banyak antara dua model dengan model perantara yang bertindak sebagai tabel gabungan. Menggunakan model terpisah di sini untuk tabel gabungan akan memungkinkan Anda menyimpan data tambahan untuk balapan dan bukan hanya hubungan antara mobil dan acara.

Anda dapat melakukan hal berikut:

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

Anda dapat membaca selengkapnya tentang asosiasi Rails di panduan .

Ini akan memungkinkan Anda mengakses acara dari mobil dan sebaliknya. Juga dengan cara ini Anda dapat menjangkau kelas mobil dari acara. Misalnya kelas mobil pertama pada event pertama:

Event.first.cars.first.car_class

Saat Anda mengulang asosiasi jangan lupa untuk menggunakan includes jika perlu.

person tmichel    schedule 26.01.2015
comment
Bagaimana Kelas Mobil berperan dalam hal ini? Saya berasumsi Mobil masih belongs_to car_class kan? - person Seldon Stone; 27.01.2015
comment
Saya yakin ini mungkin benar jadi saya akan menandainya sebagai jawabannya. Tahukah Anda bagaimana saya membuat formulir acara untuk ini? Misalnya jika saya memilih kelas mobil pada suatu acara, saya ingin menambahkan semua mobil dari kelas mobil tersebut ke racing dan memasukkannya ke dalam acara tersebut. Saat ini saya hanya bisa memikirkan mungkin for @cars.each lakukan dan kemudian mengulangi semua mobil di kelas itu dan menambahkannya satu per satu entah bagaimana..tapi ini sepertinya tidak benar bagi saya. Ini sepertinya pertanyaan lain...beri tahu saya jika saya harus membuatnya. - person Seldon Stone; 29.01.2015
comment
Ya, ini mungkin pertanyaan terpisah. Saat Anda membuat acara, Anda cukup melakukan event.cars << car_class.cars. Lihat: api.rubyonrails.org/classes/ ActiveRecord/Asosiasi/ - person tmichel; 29.01.2015