Rails Ajax create.js.erb如何重新加载部分?

时间:2012-05-29 00:38:16

标签: jquery ajax ruby-on-rails-3

我有一个表单通过ajax成功提交数据,但我无法弄清楚如何在ajax操作后触发事件。我想在提交新记录后重新加载包含表单的部分内容。

查看

#container
  #partial
   <%= form_for [@qa, @newpdd], :remote => true do |f| %>
    ....
   <%= f.submit "add %>

PDD控制器

def create
@pdd = Pdd.create!(params[:pdd])
@pdd.qa_id = params[:qa_id]
@qa = Qa.find(params[:qa_id])

respond_to do |format|
  if @pdd.save
    format.html { redirect_to(@qa, :notice => 'Pdd was successfully created.') }
    format.xml  { render :xml => @pdd, :status => :created, :location => @pdd }
    format.js
#    render :partial => pddsection
  else
    format.html { render :action => "new" }
    format.xml  { render :xml => @pdd.errors, :status => :unprocessable_entity }
  end
end
end

create.js.erb

$('#partial').replaceWith("<%= escape_javascript(render :partial => 'pdds/partial') %>");

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我使用<%=j %>标记而不是<%= escape_javascript() %>,但它们可能在功能上相似。

您的代码看起来不错。 :remote => true应该使您的浏览器执行服务器返回的任何javascript(在本例中为create.js.erb)。作为故障排除步骤,打开浏览器的开发人员控制台,查看从ajax表单提交中获得的响应。是正确的视图渲染? ERB呈现的javascript是否正确?

如果看起来不错,请将其复制并粘贴到javascript控制台中。如果这不更新页面,请弄清楚它有什么问题。可能是错误的选择器或语法错误。

答案 1 :(得分:0)

我最终放弃了:remote =&gt;表格中的真实条件如此演员所示:

Railscast 136

现在一切都按预期工作了。谢谢你的帮助。