2011-07-24 4 views
0

jQueryを使用してページの一部をリフレッシュしたいのですが、jQueryコードの実行後に必要なコレクションが利用できないため、部分的なコードを取得できません。Jqueryを使用してページ要素をリモート更新するとき、コレクション/変数をどのようにして保持しますか?

Iユーザーのコントローラでshowアクションを持っている:

def show 
     @user = User.find(params[:id]) 
     @title = "#{@user.first_name} #{@user.last_name}" 
     @posts = @user.posts.paginate(:page => params[:page], :per_page => 20) 
     @discussions = @user.discussions.paginate(:page => params[:page], :per_page => 2) 
    end 

これは、次のようにユーザーのショーのページで利用可能なコレクションの@postsと@discussionsはshow.html.erbで、パーシャルに渡すなります:

<div id="synopsis"> 
    <%= render :partial => 'users/post', :collection => @posts %> 
</div> 
<div class="pagination_links"> 
    <%= will_paginate(@posts) %> 
</div> 

しかし、のは、私はshowアクションで利用可能な@discussionsを使用して、すなわち、利用者の議論へのユーザショーのページに表示ポストを交換したいとしましょう。これを行うために、私はshow_discussionsというユーザコントローラにカスタムアクションを設定し、それに対するルートを動作させました。これはアクションです:

def show_discussions 
    respond_to do |format| 
    format.js 
    end 
end 

この参照は、このファイルが正常に#synopsisを置き換えますが、何もそれを埋め

$("#synopsis").html("<%= (escape_javascript("#{render(:partial => 'discussion_activity', :collection => @discussions)}")).html_safe %>"); 

をshow_discussion.js.erb - コレクション@discussionsはを通じて持続しないようこのアクションに対するリモート呼び出し。リモートディスカッションの後にユーザーのディスカッションを利用できるようにするにはどうすればよいですか?

更新:jsファイルを使用してajaxリクエストを行います。私は、ボタンがクリックされたときに、ユーザーのアクションshow_discussionsを取得するために指定します。

$(function() { 
$('#show_discussions').live("click", function() { 
    $.get('/users/show_discussions'); 
}); 
    $('#show_posts').live("click", function() { 
    $.get('/users/show_posts'); 
}); 
}); 

答えて

0

アプリは、次の(まあ、あなたのセッションで何を除いて、そしてあなたのポスト変数)への1つの要求からのコンテキストを持っていない覚えておいてください。ビューをレンダリングするために必要なものは、コントローラのアクションで指定する必要があります。

ユーザーIDなどの必要なコンテキストを、ajaxリクエストのパラメータとして渡すことができます。例えば

、あなたの代わりにPOSTのGETを使用しているので、ビューにそれを書くとき、あなただけのURLにユーザーIDをタックすることができますfirst answer to this question

を参照してください。スクリプトは次のようになります。

$.get('/users/show_discussions/123); 

ここで、123はユーザーのIDです。ページ上のただ一つのユーザIDをお持ちの場合

<script> 
    var jsUserID = <%= @user.id %> ; 
</script> 

javascriptの変数としてビューにユーザーIDを作成するには、のような何かを行うことができます。あなたのリンクコードは次のようになります。

$.get('/users/show_discussions/' + jsUserID); 

TL; DR:あなたは大丈夫show_discussions

+0

@discussionsをロードする必要がありますので、私は私が私のセッションでユーザーIDを保存することができると思いますし、その後の後にそれを削除します。しかし、他にも良い方法がありますか?たとえば、「show」が呼び出されると、params [:id]からユーザーを見つけることができます。たぶん(私はもちろん、)私は何とかそれを使用できる方法を学んだ場合?助けてくれてありがとうJeff – jay

+0

私の(かなり短い)編集を見てください。あなたはajaxリクエストを実行するコードを投稿できますか? –

+0

私は現在、div #show_discussionsがクリックされたときにjsファイルを使用してリクエストを行います。 – jay

関連する問題