来自渲染的双重调用

时间:2013-10-21 18:25:50

标签: jquery ruby-on-rails-3

我有一种我不理解的行为。

点击一个简单的link_to:remote => true

向导/ index.html.erb

< %= link_to "bros", new_wizard_path(:idparent= >wz.idparent, :id= >wz.id), :remote => true %>  

控制器准备一个新的@wizard实例

控制器/ wizards_controller.rb

def new  
  @wizard = Wizard.new  
  @wizard.idparent = flash[:id_of_parent]  
  flash[:id_of_parent] = nil  
  @wizard.idparent ||= params[:idparent]
end  

然后调用相应的js.erb,

向导/ new.js.erb

$('#divwizard').append('<div id="wizardnew"></div>');  
$('#wizardnew').html('<%=j (render(:partial => "wizards/new")) %>');  

后者称为部分视图

向导/ _new.html.erb

< %= render :partial = > "wizards/form" % >  

向导/ _form.html.erb

<%= form_for @wizard, :remote => true do |wiz| %>  
    < div class="edt_wiz" >  
    < div class="edt_wiz_pos" >  
<%= wiz.label :pos, :class => "pos"%>  
<%= wiz.text_field :pos %>  

但是在webrick日志中,我在* _new.html.erb *

上读了一个双重调用

webrick log

Started GET "/wizards/new?id=126" for 127.0.0.1 at 2013-10-21 19:08:51 +0200  
Processing by WizardsController#new as JS  
Parameters: {"id"=>"126"}  
Rendered wizards/_form.html.erb (5.7ms)  
Rendered wizards/_new.html.erb (6.9ms)  
Rendered wizards/_form.html.erb (6.3ms)  
Rendered wizards/_new.html.erb (7.1ms)  
Rendered wizards/new.js.erb (17.7ms)  
Completed 200 OK in 79ms (Views: 28.0ms | ActiveRecord: 0.9ms)  

发生了什么事? 谁调用了部分_new.html.erb两次?

有人可以帮帮我吗? 我该如何调试这种情况?

编辑我

我省略了一段代码(对不起!) 有一个 javascript条件!!

new.js.erb

if (something) { 
  $('#divwizard').append('<div id="wizardnew"></div>');  
  $('#wizardnew').html('<%=j (render(:partial => "wizards/new")) %>'); 
} else {   
  $('#otherdiv').append('<div id="wizard-other-new"></div>');  
  $('#wizard-other-new').html('<%=j (render(:partial => "wizards/new")) %>'); 
}  

和erb,我认为(?),执行两个渲染:部分因为条件是在javascript中,然后在本地浏览器后执行。

我很困惑或者是对的?

1 个答案:

答案 0 :(得分:1)

可能就是这种情况,因为你没有在渲染调用之间传递格式。

尝试将format: params[:format]添加到部分内的渲染调用中。

如果这样做无法解决问题,那么在问题渲染调用旁边特别提高参数或格式可能会指示您发生了什么。