我有这个问题:
我的网络应用程序有一个表单,用户可以在其中自定义其个人资料。 在每个配置文件中可以指定许多技能,我希望允许用户按下一个按钮(添加新技能),以指定他们想要的尽可能多的技能。 所以这是控制器代码:
accepts_nested_attributes_for :skills, :allow_destroy=>true, :reject_if => lambda {|a| a[:name].blank?}
这是表单(只是具有嵌套属性技能的部分):
<%= f.fields_for :skills do |builder|%>
<div class="field">
<%= builder.label :skill %>
<%= builder.text_field :name%>
<%= builder.hidden_field :_destroy %>
<%= link_to 'remove', '#', :onclick=>'removeField()'%>
</div>
<%end%>
此表单完美运行并显示用户的每项技能,它允许编辑等。现在的问题是,我想添加一个链接到&#34;添加新技能&#34;所以改变形式的javascript函数和添加新技能输入字段,我真的不知道如何行动,主要是因为嵌套属性在我不喜欢的形式中具有特定的id和名称;了解:
<input id="profile_skills_attributes_0_name" name="profile[skills_attributes][0][name]" size="30" type="text" value="Mathematicansszz" />
它还添加了另一个带有技能id的隐藏输入字段(无法预测是否未创建技能),无法从HTML静态页面创建新技能?
<input id="profile_skills_attributes_0_id" name="profile[skills_attributes][0][id]" type="hidden" value="3" />
任何想法或解决方法?谢谢
答案 0 :(得分:1)
我编写了一个可以处理的gem,可以更轻松地处理嵌套表单:cocoon。 宝石可以使用标准的rails formhelper,也可以使用formtastic或simple_form。
我还建议您查看formtastic或simple_form,因为这些是令人敬畏的宝石,使表单处理更容易。但与HAML一样,这是个人选择。
答案 1 :(得分:0)
fields_for创建一个字段数组。名称中的“0”表示数组中的索引。由于您正在创建新记录,因此您可以忽略隐藏的ID字段。
所以通过javascript你只需要做两件事: 1.计算子集合的现有输入数量,以获取新索引。 2.使用新索引添加新文本字段。
使用通配符选择器(如$('input [name $ =“] [name]”]'),使用jQuery相对容易。检索计数(对于新索引)。如果您有另一个带有名称字段的数组字段,则可能需要使用正则表达式选择器(通过插件)。一种更简单的方法可能是在每个技能名称输入中添加一个类,并在计数时将该类用作选择器。
要附加新输入,请参阅:
如果你没有使用jquery,那么在其他框架中它应该与google搜索相似。