2010-12-23 45 views
0

我在我的应用程序中有三个模型:运动员,比赛和结果。运动员有很多成绩,比赛有很多成绩,而成绩属于运动员和比赛。每场比赛都有12个结果。如何在我的应用中输入比赛结果?

作为一名Rails开发人员,我无法理解如何创建用于输入12种比赛结果的Web表单。我应该维护结果作为一个单独的资源,或嵌套他们在赛事?在我的控制器中,我会在New操作下创建12个结果对象的实例吗?我如何为每个实例提交适当的race_id?

如果你能帮我澄清我对这个问题的想法,并指出我在正确的方向,将不胜感激!

回答

0

我相信有几种方法可以解决这个问题。您当然可以将Results嵌套在Races下,但是这会成为您是否在创建Results时与其Race同时创建的问题(值得考虑,因为您需要知道如何将Results与您的Race ,例如每个Result表格是否有一个race_id作为隐藏字段?如果是的话Race可能需要已经存在)。但在任何情况下,这可能是12 Result表格与Result.new作为对象。

+0

将首先创建比赛,然后结果将在稍后添加。在这种情况下,每个Result表单都会有一个race_id作为隐藏字段?我认为这是我的问题所在。我很难理解如何将这两个模型结合在一起。 – jktress 2010-12-23 18:41:25

1

如果您的结果具有唯一且自动生成的ID,则不需要嵌套结果,但如果您认为它使得您的应用程序更易于使用或编程,则可以这样做。

您的网页表单应该基于输入12位运动员的用例,因为他们排名为单一比赛。这意味着你可以使用多个HTML输入每个结果:

 
<input type="hidden" name="race[results_attributes][][rank]" value="1" /> 
<input type="text" name="race[results_attributes][][athlete_id]" /> 
<input type="hidden" name="race[results_attributes][][rank]" value="2" /> 
<input type="text" name="race[results_attributes][][athlete_id]" /> 

然后,您可以修改你的比赛模式,接受输入的结果:

 
class Race 
    has_many :results 
    accepts_nested_attributes_for :results 
end 

,简单地通过属性在UPDATE语句:

 
Race.find(params[:id]).update_attributes params[:race]