2015-01-26 66 views
0

我需要关于从其他模型中提取数据以及在Rails中正确引用帮助的帮助。例如,我有一个Rails应用程序,它包含比赛信息。在这里我有汽车,汽车类,赛事和赛车。我拥有它可以创造一部属于汽车类的汽车,但是我不知道我会如何做赛事和赛车部分。我希望这一切都很有意义,因为我仍然试图自己将自己的头围绕在它周围。我正在使用Rails版本4.1.6引用来自其他模型的其他数据

此外,如果有人能想出一个更好的标题这个问题,我将不胜感激。

汽车种类: 这是一辆车属于的类。所有的汽车都必须上课。这应该包含关于汽车类的所有信息。

型号:

class CarClass < ActiveRecord::Base 
    has_many :cars 
end 

汽车: 汽车的一类,你可以在模型中看到CarClassCar属于。这应该包含关于汽车的所有细节。

型号:

class Car < ActiveRecord::Base 
     belongs_to :car_class 
end 

事件: 事件就是一个汽车类将比赛。它将持有活动的详细信息,但课程和汽车的详细信息将由上述CarClassCar保存。应该有可能获得所有赛车的列表。我假设Event将有很多Racing


赛车 这应持有约在每车的基础上种族属性。例如他们来了什么地方,跟踪时间等。我假设Racing将属于Event

+0

class Car neo 2015-01-26 22:44:37

+0

感谢您的帮助Neo,我已经解决了这个问题。 – 2015-01-26 22:47:21

回答

0

这是一个非常经典的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的协会in the guides

这将允许您访问汽车事件,反之亦然。也可以通过这种方式从事件中获得汽车课程。例如,第一辆车的类第一个事件:

Event.first.cars.first.car_class 

当你循环通过协会不要忘记使用includes在适当情况下。

+0

汽车类将如何发挥这一点?我认为Car仍然是'belongs_to car_class'吧? – 2015-01-26 23:38:58

+0

@SeldonStone用'CarClass'编辑了我的答案 – tmichel 2015-01-27 13:11:49

+0

我确定这可能是正确的,所以我打算将它标记为答案。 你知道我会为此做一个事件表吗?例如,如果我选择某个赛事的汽车班,我希望将该赛车的所有赛车添加到“赛车”中,并在该赛事中加入。现在我只能想到一个'for @ cars.each'的做法,然后循环遍历该班的所有车辆,并以某种方式逐一添加它们......但这对我来说似乎不正确。 这似乎是另一个问题...让我知道如果我应该创建一个。 – 2015-01-29 02:44:52