2009-08-08 34 views
0

我希望我的问题可以理解,否则我很乐意澄清。铁轨上的棘手的红宝石问题。是否存在简单的解决方案?

我们有这项体育赛事,我很乐意注册人。 :)

事实:

  • 人能有一队人5-10的。
  • 需要知道人们开始的顺序。
  • 需要知道组长是谁。

我的确在下面的样式表单:

  1. o [____Write first name here___]< ---这是一个文本框
  2. o [____Write second name here__]
  3. o [___________ ... ____________]
  4. ...

“o”是一个单选按钮,用于选择组长。

我有一个模型和模型团队。每个团队都有一个leader_id(这是Person ID之一)。此外每个队伍还有:has_many人。

在控制器我有

def create 
    @team = Team.new(params[:team]) 
    @team.save #just assume there are no errors 
end 

在我(对无线电按钮)的观点:

<input id="team_leader_id_**????**" 
     name="team[leader_id]" 
     type="radio" 
     value="**????**" 
/> 

<input id="team_leader_id_**????**" 
     name="team[leader_id]" 
     type="radio" 
     value="**????**" 
/>  
# etc. 

我的问题:我应该把在**????**

我还不知道这些人的ID,因为他们还没有被创建。我必须在那里放置一些元ID,Ruby上的Ruby能够正确识别和链接所有内容?

您不必阅读其余部分(它描述了我使用的是破解版)

至于说,此刻我正在做一个丑陋的黑客攻击:第一拯救球队(没有产生一个领导者),然后从数据库中获取相同的团队,得到它的人,并找到匹配的

params[:team][:leader_id]. 

在球队的leader_id领域最后拯救这个人的ID值的第一人。

但是这段代码效率低下,数量巨大,而且越野车越来越多,我怀疑有一种更简单的方法。

回答

2

无线电应具有相同的名称即

<input id="team_persons_attributes_0_leader_id" 
     name="team[persons_attributes][leader_id]" 
     type="radio" 
     value="0" 
/> 
<input id="team_persons_attributes_1_leader_id" 
     name="team[persons_attributes][leader_id]" 
     type="radio" 
     value="1" 
/> 
<input id="team_persons_attributes_2_leader_id" 
     name="team[persons_attributes][leader_id]" 
     type="radio" 
     value="2" 
/> 

这种方式只能有一个选择的(通过浏览器内部的单选按钮机构)和params[:team][:persons_attributes][:leader_id]将包含一个索引到params[:team][:persons]这将是领导者的名字。

获得ID

team = Team.create(params[:team]) 
params[:team][:persons].each_with_index{|name, idx| 
    person = Persons.create(:name => name) 
    #assuming no errors 
    team.leader_id = person.id if params[:team][:persons_attributes][:leader_id] == idx 
} 
+0

谢谢。我更新了我的帖子。愚蠢的错误,问题依然存在。 :) – jacob 2009-08-08 01:12:16

+0

只是为了阐明:rails上的ruby将team.leader_id设置为我在“value”属性中指定的任何值。以你的例子为例,如果我选择第二个,这可能是“1”。但我真的想拥有该字段中的人员的ID,而不是1. – jacob 2009-08-08 01:16:44

+0

我可以通过params [:team] [:persons] [params [:team] [:persons_attributes] [: leader_id]] [:id] - 我会更新我的答案以更详细地解释。 – 2009-08-08 11:34:56

1

它好像你与他们的一个标记为组长提交一气呵成多个用户。在这种情况下,你可以构造是这样的:(?使用嵌套属性)

<%= radio_button_tag "[team][leader]","[1]" %> 
<%= radio_button_tag "[team][leader]","[2]" %>> 

然后在控制器创建人,后来干脆抬头看一个标记为球队战绩领导者的ID。

+0

感谢您的回答。 – jacob 2009-08-09 02:34:35