如何在我的应用程序中输入比赛结果?

时间:2010-12-23 18:14:27

标签: ruby-on-rails

我的应用程序中有三个模型:运动员,种族和结果。运动员有很多结果,比赛有很多结果,结果属于运动员和比赛。每场比赛都有12个结果。

作为Rails的开发者,我无法理解如何创建用于输入12个比赛结果的Web表单。我应该将结果作为单独的资源维护,还是将它们嵌套在Races下?在我的控制器中,我会在New操作下创建12个结果对象的实例吗?如何为每个实例提交相应的race_id?

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

2 个答案:

答案 0 :(得分: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

只需在更新语句中传递属性:

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

答案 1 :(得分:0)

我确信有几种方法可以解决这个问题。您当然可以在Results下嵌套Races,但随后问题是您是否与Results同时创建Race(这是值得思考,因为您需要知道如何将Results绑定到Race,例如每个Result表单是否有race_id作为隐藏字段?如果是,{ {1}}可能已经存在了)。但在任何一种情况下,这可能是以Race为对象的12 Result个形式。