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');
});
});
で
@discussions
をロードする必要がありますので、私は私が私のセッションでユーザーIDを保存することができると思いますし、その後の後にそれを削除します。しかし、他にも良い方法がありますか?たとえば、「show」が呼び出されると、params [:id]からユーザーを見つけることができます。たぶん(私はもちろん、)私は何とかそれを使用できる方法を学んだ場合?助けてくれてありがとうJeff – jay私の(かなり短い)編集を見てください。あなたはajaxリクエストを実行するコードを投稿できますか? –
私は現在、div #show_discussionsがクリックされたときにjsファイルを使用してリクエストを行います。 – jay