【问题标题】:Tricky ruby on rails problem. Does an easy solution exist?棘手的 ruby​​ on rails 问题。是否存在简单的解决方案?
【发布时间】:2009-08-08 19:54:55
【问题描述】:

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

我们即将举办这项体育赛事,我很高兴注册这些人。 :)

事实:

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

我做了一个如下样式的表格:

  1. o [____Write first name here___]
  2. o [____Write second name here__]
  3. o [___________ ... ____________]
  4. ...

“o”是一个单选按钮,用于选择团队负责人。

我有一个模型Person和一个模型Team。每个团队都有一个 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​​ on rails 可以正确识别并链接所有内容?

您不必阅读其余部分(它描述了我正在使用的 hack)

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

params[:team][:leader_id].

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

但这段代码效率低下、庞大且有缺陷,我怀疑有更简单的方法。

【问题讨论】:

    标签: ruby-on-rails radio-button


    【解决方案1】:

    收音机应该具有相同的名称,即

    <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
    }
    

    【讨论】:

    • 谢谢。我更新了我的帖子。愚蠢的错误,问题仍然存在。 :)
    • 只是为了澄清:ruby on rails 将 team.leader_id 设置为我在“value”属性中指定的任何内容。以您的示例为例,如果我选择第二个,这可能是“1”。但我真的很想知道该字段中的人的 ID,而不是 1。
    • id 可以通过 params[:team][:persons][params[:team][:persons_attributes][:leader_id]][:id] 使用我的示例获得 - 我会更新我的回答会更详细地解释。
    • 不错,坦克 :) 不是单线解决方案,但可能没有。
    【解决方案2】:

    您似乎一次性提交了多个用户,其中一个被标记为团队负责人。在这种情况下,您可以构造如下内容:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-02
      • 2010-11-17
      • 2014-06-26
      • 1970-01-01
      相关资源
      最近更新 更多