2011-05-14 10 views
0

私はAJAXで、この部分をレンダリング動作していないとレンダリング部分:文は常に、それはすべきではない場合でも、trueと評価されている場合は、何らかの理由でAJAXが正しく

<% if current_user.profiles_shown_video.where("video_id = ?", params[:id]).count == 0 %> 
    <p class="none"> None </p> 
<% else %> 
    <ul class="shown_users_list"> 
    <% current_user.profiles_shown_video.where("video_id = ?", params[:id]).each do |p| %> 
     <li><%= link_to image_tag(p.photo.url(:thumbnail)), profile_path(p), :class => "feed_image"%> 
      <%= link_to "#{p.user.name}", profile_path(p), :class => "normal squeeze" %> 
      <%= link_to image_tag("/images/facebox/closelabel.gif"), showable_video_path(ShowableVideo.find_by_user_id_and_profile_id_and_video_id(current_user, p, @video)), :method => :delete, :remote => true, :class => "showable_video_delete" %></li> 
    <% end %> 
    </ul> 
<% end %> 

最初。つまり、常に<p class="none"> None </p>が表示されます。ページを更新すると、修正されます。 AJAXでレンダリングしたときに、この部分のif文が正しく評価されないのはなぜですか?これをどうすれば解決できますか?これはdestroy.js.erbである

def destroy 
    @showable_video = current_user.showable_videos.find(params[:id]) 
    @showable_video.destroy 
    respond_to do |format| 
    format.html {redirect_to :back} 
    format.js 
    end 
end 

:ここ

は破壊するアクションです。上記の最初のコードブロックを含む部分をレンダリングします。

$("#shown_users_div").html('<%= escape_javascript(render("showable_videos/shown_users")) %>') 
+0

さらに詳しい状況が必要です。あなたのAjaxアクションではどんなコードが実行されていますか? –

+0

の投稿 – user730569

答えて

0

ActiveRecordは、関連するオブジェクトをキャッシュします。 @showable_video.destroyの実行後にcurrent_user(それ自体がキャッシュされている可能性があります)にはまだメモリに@showable_videoがあるため、コレクションは空ではありません。データベースレコードを作成、更新、または削除した後、データベースから関連オブジェクトをリロードするように、データベースレコードを作成、更新、または削除した後で実行する必要があります。

+0

いいえ、問題は 'current_user.profiles_shown_video.where(" video_id =? "、params [:id])。countは実際にはそうではない場合は常に0に評価されます。コレクションはまだ空ではありません。 – user730569

+0

申し訳ありませんが、私はちょうど推測しています。 'profiles_shown_video'メソッドが何であるか分かりませんし、あなたのモデルにどのようなカラム/アソシエーションがあるのか​​わかりません。 –

+0

これは問題ありません。私はそれが私のアプリの仕様とは対照的に、一般的にAJAXの何かを持つかもしれないと考えていました。 – user730569