2011-12-18 5 views
0

Это как мой взгляд выглядит (не обращайте внимания на открытие и закрытие тегов):rails3 ajax: Каков наилучший способ сохранения локальных переменных через ajax?

@obj1.leaves.each do |l| 
    <div id = "form"> 
     if <some_condition> 
      render :partial => 'shared/view1', :locals => { :l => l } 
     else 
      render :partial => 'shared/view2', :locals => { :l => l } 
     end 
    </div> 
end 

И окончательное действие на view1 вызывает view2 для отображения и наоборот через AJAX. Но когда визуализируются view1 или view2, локальная переменная 'l' больше не распознается и выдает ошибку, из-за которой формы не отображаются (кроме обновления страницы вручную). Что я делаю, чтобы формы работали и сохраняли мои «l»?

Спасибо за вашу помощь заранее.

EDIT: Мой файл create.js.erb для view1 (view2 я на самом деле уничтожить метод так, наоборот):

$("#form").replaceWith("<%= escape_javascript(render('shared/view2')).html_safe %>") 

И мой фактический вид:

<%= form_for([l, l.likes.build], :remote => true) do |f| %> 
<div class="actions"><%= f.submit "Like" %></div> 
<% end %> 
+0

Что не удается, тот, который вы показываете, или Ajax, который показывает другой? –

+0

форма, обработанная ajax, не удалась – Ari53nN3o

+0

Затем показ части, которая сделает это, было бы полезно. –

ответ

2

(Не ответ .)

@obj1.leaves.each do |l| 
    partial = <some_condition> ? 'shared/view1' : 'shared/view2' 
    render :partial => partial, :locals => { :l => l } 
end 

Местные жители это просто; местный. Мне непонятно, что Ajax, о котором вы говорите, - replaceWith просто заменяет контент, он не делает запрос. Если это все в одном запросе, вы можете сделать l переменной экземпляра (@l) и посмотреть, не очистит ли это все.

+0

Спасибо за рефакторинг .. – Ari53nN3o

Смежные вопросы