该应用程序在屏幕上打印代码而不是在rails 3.1.0中查看

时间:2012-01-20 18:25:14

标签: jquery ruby-on-rails ruby-on-rails-3.1

在我们的应用程序中,动态添加一个选择框到新的rfq表单。问题是代替视图,代码被打印在屏幕上。该代码基于railscasts.com#197进行了一些修改。

以下是rfqs / _form_new.html.erb中的代码:

  <div id="std">
  <%= render :partial => 'standards', :collection => @rfq.standards, :locals => { :f => f } %>
  </div>
  <p><%= link_to_add_fields "Add Std", f, :standards, @rfq %></p>

点击“添加标准”后,屏幕截图如下:

screen shot for "Add Std"

这是link_to_add_fields:

  def link_to_add_fields(name, f, association, obj)
    if association == :standards
      new_object = obj.standards.build
    else
      new_object = obj.test_items.build
    end

    link_to_function(name, "add_fields(this, \"#{association}\", \"escape_javascript(render :partial => association.to_s, :collection => new_object, :locals => { :f => f })\")")
  end  

这是add_fields:

function add_fields(link, association, content) {
  var new_id = new Date().getTime();
  var regexp = new RegExp("new_" + association, "g")
  $(link).parent().before(content.replace(regexp, new_id));
}      

rfq和标准之间的关系是HABTM。在railscasts.com示例中,关系是has_many和belongs_to。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

问题是你将一个带有escape_javascript ...的字符串传递给link_to_function。

您可能希望立即渲染部分并将其放入link_to_function

link_to_function(name, "add_fields(this, \"#{association}\", #{escape_javascript(render :partial => association.to_s, :collection => new_object, :locals => { :f => f })})")