2

Given

  1. 3 ActiveRecord models:

    class Dealer < ActiveRecord::Base
    end
    
    class CarMake < ActiveRecord::Base
      has_many :car_models
    end
    
    class CarModel < ActiveRecord::Base
      belongs_to :car_make
    end
    
  2. non of either CarMake or CarModel should have additional foregin keys (making managing of makes/models isolated and independent),
  3. adding join tables or associations is not prohibited and is welcome.

Problem

I need dealer to have assigned a desired subset of available car_makes and desired subset of car_models for each of respectively assigned car_make.

Example

Given this data:

       car_models            car_makes
------------------------   -------------
id  car_make_id    title   id      title
 1            1     Flex    1       Ford
 2            1   Fiesta    2  Chevrolet
 3            1    Focus    3    Mercury
 4            2   Impala    4     Nissan  
 5            2  Suburan
 6            3    Milan
 7            4   Altima

What I want is to do:

dealer1.his_makes  # => [Ford, Chevrolet, Mercury]
dealer1.his_models # => [Flex, Fiesta, Impala, Milan]

dealer2.his_makes  # => [Ford, Mercury, Nissan]
dealer2.his_models # => [Fiesta, Focus, Altima]

My question is:
Which associations/tables should I add to achieve this?.

4

2 回答 2

1

添加属于 Dealer、CarModel 和 CarMake 的 Inventory 模型。只是为了好玩而在“数量”字段中折腾。

您可能会争辩说 CarModel 不是必需的,但如果它是一个常见的查询,似乎是一个合理的去规范化点。

于 2013-07-29T19:14:03.173 回答
0

经销商和汽车制造商之间的连接表将允许您指定“经销商所需的汽车制造商”。如果所有所需的模型都是此表中指定的品牌,那么我将在 DealerCarMakes 和 CarModels 之间创建一个连接表,以指定该经销商所需的模型。

虽然您可以使用单个表,但会有一些问题:

  1. 您需要一个不同的查询来检索理想的汽车制造商,这通常表明缺乏规范化。
  2. 能够指定理想的汽车品牌将取决于该品牌是否有理想的汽车模型-在这里可能不是问题,但在没有这种依赖关系的其他情况下绝对是一个问题。
  3. 您不能拥有 DealerCarMake 级别的属性,例如“自日期以来的理想”或值范围。
于 2013-07-30T07:38:59.667 回答