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の最後のアクションが表示され、その逆AJAXスルーするVIEW2の原因となります。しかし、view1またはview2がレンダリングされると、ローカル変数 'l'は認識されなくなり、フォームが表示されないようにするエラーがスローされます(マニュアルページの更新時を除く)。フォームを動作させ、私の 'l'を持続させるために私は何をしますか?

ご協力いただきありがとうございます。

EDIT:VIEW1のための私のcreate.js.erbファイル(私は実際にそうその逆の方法を破壊する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

あなたが見せているもの、またはもう1つを示す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

関連する問題