Двойные звонки от рендера

0

У меня такое поведение, которого я не понимаю.

Нажмите на ссылку 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 дважды?

Кто-нибудь может мне помочь, пожалуйста? Как я могу отладить эту ситуацию?

EDIT I

Я пропустил часть кода (извините!).
есть условие 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, я думаю (?), выполняю оба рендера: partial, потому что условие находится в javascript, а затем выполняется после локального браузера.

Я смущен или прав?

  • 1
    AFAIK Вы не должны использовать flash для хранения временных вещей, они имеют совсем другое назначение. Доступ к вашим данным через params .
  • 0
    Спасибо @pduersteler; Я пришел из другого метода на том же контроллере (с redirect_to) и с помощью flash это легко; Я рассматриваю ваш совет.Tnx
Теги:
ruby-on-rails-3

1 ответ

1

Это может быть так, потому что вы не передаете формат между вызовами рендера.

Попробуйте добавить format: params[:format] к вызовам рендеринга внутри частичных файлов.

Если это не решит проблему, то повышение параметров или формата, непосредственно относящихся к рассматриваемым вызовам рендеринга, может дать вам указания относительно того, что происходит.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню