铁轨上的棘手红宝石问题。有一个简单的解决方案吗?

时间:2009-08-08 00:56:30

标签: ruby-on-rails radio-button

我希望我的问题是可以理解的,否则我很乐意澄清。

我们将举办这项体育赛事,我很荣幸能够注册这些人。 :)

事实:

  • 一个人可以拥有一个5-10人的团队。
  • 需要知道人们开始的顺序。
  • 需要知道团队负责人是谁。

我做了以下风格的表格:

  1. o [____Write first name here___] < ---这是一个文本字段
  2. o [____Write second name here__]
  3. o [___________ ... ____________]
  4. ...
  5. “o”是一个单选按钮,用于挑选团队负责人。

    我有一个模型和一个模型团队。每个团队都有一个 leader_id (这是一个人员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.
    

    我的问题:我应该在**????**处理什么?

    我还不知道这些人的身份证,因为他们尚未创建。我必须在那里添加一些meta-ID,ruby on rails识别并正确链接所有内容?

    您不必阅读其余内容(它描述了我正在使用的黑客)

    如上所述,目前我正在做一个丑陋的黑客攻击:首先保存团队(不产生领导者),然后从数据库中获取同一个团队,获取其人员,并找到匹配值的第一个人

    params[:team][:leader_id].
    

    最后将此人的ID保存在团队的leader_id字段中。

    但是这段代码效率低下,庞大而且错误,我怀疑有一种更简单的方法。

2 个答案:

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

答案 1 :(得分:1)

好像你一次性提交了一些用户,其中一个被标记为团队领导者。在这种情况下,你可以构建类似的东西:

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

然后在控制器中创建人员(使用嵌套属性?),然后只需查找标记为团队记录的领导者的ID。