ruby,rails,railscasts例子我搞砸了

the*_*gah 0 ruby-on-rails

如果您在嵌套表单上看到railscast,则这是动态创建链接的帮助方法.但是,在我升级到ruby 1.9.2和rails 3后,这不起作用,我现在知道为什么.

    def link_to_add_fields(name, f, association)
  new_object = f.object.class.reflect_on_association(association).klass.new
  fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
    render(association.to_s.singularize + "_fields", :f => builder)
  end
  link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")"))
end
Run Code Online (Sandbox Code Playgroud)

这是javascript

 function add_fields(link, association, content) {
 var new_id = new Date().getTime();
 var regexp = new RegExp("new_" + association, "g")
 $(link).up().insert({
  before: content.replace(regexp, new_id)
 });
Run Code Online (Sandbox Code Playgroud)

}

当我查看源代码时,链接的呈现方式如下:

<p><a href="#" onclick="add_fields(this, &quot;dimensions&quot;, &quot;&quot;); return false;">Add Dimension</a></p>
Run Code Online (Sandbox Code Playgroud)

因此&quot;&quot;,构建新模板的信息不正确,而且字段的字符串是如何设置的.如fields= f.fields_for

rya*_*anb 5

它似乎f.fields_for不再返回渲染字段的字符串.我猜这是ERB Blocks更改的副作用,在这种情况下它只适用于Rails 3 Beta 2.我认为这是一个bug,希望它会在最终版本之前修复,但是现在你可以做到像这样的快速修复:

def link_to_add_fields(name, f, association)
  new_object = f.object.class.reflect_on_association(association).klass.new
  fields = fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
    safe_concat(render(association.to_s.singularize + "_fields", :f => builder))
  end
  link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")"))
end
Run Code Online (Sandbox Code Playgroud)