2013-07-07 209 views
1
def link_to_add_nested_fields(name, f, association, klasss, type) 
    new_object = f.object.send(association).klass.new 
    id = new_object.object_id 
    field = f.fields_for(association, new_object, child_index: id) do |builder| 
     render(association.to_s.singularize + "_#{type}", f: builder) 
    end 
    link_to(name, '#', class: klasss, data: {id: id, type: field.gsub("\n", "")}) 
    end 

我想自定义一块帮手代码我从这里得到http://railscasts.com/episodes/196-nested-model-form-revised,但我有问题的类型参数。这个助手正在使用的一个例子;嵌套域辅助方法

<%= link_to_add_nested_fields "Add custom field", f, :fields, "add_fields","fields" %> 

问题是肯定与类型参数,有没有人知道我可以解决这个问题? 谢谢

回答

1

我已经看到这个转换,这似乎并不是处理嵌套属性的“添加更多”链接的最佳解决方案。

基本上,accept_nested_attributes的工作方式在这里是关键。

在你controller

parent.child.build 

只有一次建立它的初始视图。这将使该字段最初出现在页面重新加载上。

在你.erb template

<% parent.children.each do |child| %> 
<div class="child_fields"> 
    <%= render "the child fields partial" %> 
</div> 
<% end %> 
<%= link_to "Add More", "#", class: "add_more_link" %> 
<% javascript_include_tag "js_file_to_handle_add_more_link" %> 

在你"js_file_to_handle_add_more_link.js"

首先,算上现有的子场使用:

$('.child_fields').size(); 

现在,id作为创建HTML领域

parent_children_attributes_" + count + "_attribute_name" 

和名称:

"parent[children_attributes]["+ count +"][attribute_name]" 

每一组子字段应该有一个独特的价值计数。此外,这里的父母是单数,而孩子是复数。

而就是这样。

现在当提交表单时,轨道会自动为每一个它是由accepts_nested_atributes格式识别唯一

+0

感谢这个救子对象,我会尝试一下在我的下一个项目,但现在我有很多代码(包括红宝石和JavaScript)投资于这种方法,使它适合我的需求:(你知道我可以如何将字符串的类型参数转换为纯文本吗?或者更好的还有散列键? – Skyalchemist

+0

你可以解释一下这一点吗 – Nerve

+0

我传递字符串“字段”的类型参数,所以在倒数第二行(link_to),数据是现在;数据:{id:id,“字段“:field.gsub(”\ n“,”“)}因为type是一个字符串,我想要的是data:{id:id,fields:field.gsub(”\ n“,”“)}。不是“领域”,你会得到什么? – Skyalchemist