我希望我的问题是可以理解的,否则我很乐意澄清。
我们将举办这项体育赛事,我很荣幸能够注册这些人。 :)
事实:
我做了以下风格的表格:
o [____Write first name here___]
< ---这是一个文本字段 o [____Write second name here__]
o [___________ ... ____________]
“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字段中。
但是这段代码效率低下,庞大而且错误,我怀疑有一种更简单的方法。
答案 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。