首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails问题accepts_nested_attributes_for

Rails问题accepts_nested_attributes_for
EN

Stack Overflow用户
提问于 2011-05-02 15:38:58
回答 2查看 1.2K关注 0票数 0

我有个问题:

我的web应用程序有一个表单,用户可以在其中自定义他们的配置文件。在每个配置文件中可以指定多个技能,我希望允许用户按一个按钮(添加新技能),以便指定他们想要的多少技能。这是控制器代码:

代码语言:javascript
复制
  accepts_nested_attributes_for :skills, :allow_destroy=>true, :reject_if => lambda {|a| a[:name].blank?}

这是表单(只是具有嵌套属性技能的部分):

代码语言:javascript
复制
<%= 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%>

这个表单很好地显示了用户的每一项技能,它允许编辑等等。现在的问题是,我想添加一个链接到“添加新技能”,所以一个更改表单和添加新技能输入字段的javascript函数,我真的不知道该如何操作,主要是因为嵌套的属性在表单中有特定的id和名称,我不明白:

代码语言:javascript
复制
<input id="profile_skills_attributes_0_name" name="profile[skills_attributes][0][name]" size="30" type="text" value="Mathematicansszz" /> 

它还添加了另一个带有技能id的隐藏输入字段(如果没有创建技能就无法预测),使从HTML静态页面创建新技能变得不可能?

代码语言:javascript
复制
 <input id="profile_skills_attributes_0_id" name="profile[skills_attributes][0][id]" type="hidden" value="3" /> 

有什么主意或解决办法吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-02 17:57:56

fields_for创建一个字段数组。名称中的"0“表示数组中的索引。由于您正在创建新的记录,您可以简单地忽略隐藏的id字段。

因此,通过javascript,您只需要做两件事: 1.计算子集合的现有输入数,以获得新的索引。2.使用新索引添加一个新的文本字段。

使用通配符选择器(如$(‘inputname$=“]).length;检索计数(用于新索引),这相对容易。如果您有另一个包含名称字段的数组字段,则可能需要使用regex选择器(通过插件)。一种更简单的方法可能是在每个技能名称输入中添加一个类,并在计数时使用该类作为选择器。

若要追加新输入,请参阅:

http://api.jquery.com/append/

如果您不使用jquery,那么它在其他框架中应该是相似的,只需稍微谷歌一下。

票数 0
EN

Stack Overflow用户

发布于 2011-05-02 19:16:01

我编写了一个gem,它可以使动态处理嵌套表单更容易:。gem与标准的rails格式化程序一起工作,但也与Fortastic或simple_form一起工作。

我还建议您结帐表单或simple_form,因为这些是令人敬畏的宝石,使表单处理更容易。但与HAML一样,这是个人的选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5859137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档