Rails 4 моделируют многие ко многим полиморфным ассоциациям

StackOverflow https://stackoverflow.com/questions/19845586

Вопрос

Я борюсь с первым шагом на «Как моделировать отношения»? Я следую за несколькими моделями,

class CarMake  
end  

class Region  
end  

Class CarModel  
end  

Отношение в том, что «автомобиль -производитель» имеет много моделей, принадлежащих к нулю или более регионам. Например, скажем, что у Honda есть «гражданская» модель в Северной Америке и Азии. Также у Honda есть «Civicmini» только в Европе. Как бы лучший способ смоделировать эти отношения? Как будто каждая кармодель принадлежит автопроизводителям через регион?

Также есть несколько других моделей, которые используют это отношение,

Покупатель

class Customer  
  has_many :cars   
end  

Этот автомобиль ссылается на все атрибуты, такие как Carmake, Carmodel, Region, но как (мне нужен еще один класс для хранения этих атрибутов, и ссылаться на его здесь, в «автомобиле»?)

class Car  
  belongs_to :customer  
end  
Это было полезно?

Решение

В классе автомобиля определяют полиморфную интерфейс

belongs_to :car_type(interface name change according to you), polymorphic: true

В классе автопроизводителей

has_many :cars, as: :car_type

В классе Carmodel

has_many :cars, as: :car_type

В региональном классе

has_many :cars, as: :car_type

А всякий раз, когда вы храните записи в столе автомобилей .... храните тип объекта, который будет (автопроизводитель, Carmodel, Region) и ID

Другие советы

Это сработает для вас?

class Maker
   has_many :models
end

class Model
   has_many :regions
   belongs_to :maker
end

class Region
  belongs_to :model
end

class Car
  has_one :model
  belongs_to :customer
end

class Customer
  has_many :cars
end

Таким образом, в этом случае клиент может иметь несколько автомобилей, которые являются одинаковыми или разными моделями, и модель может иметь много разных регионов и принадлежать производителю.

Это работает для вашего варианта использования?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top