使用AJAX部分呈现无法正常工作

时间:2011-05-14 05:57:44

标签: jquery ruby-on-rails ruby ajax ruby-on-rails-3

我用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 %>

由于某种原因,第一个if语句总是被评估为true,即使它不应该。换句话说,始终显示<p class="none"> None </p>。如果我刷新页面,它会得到纠正。为什么在使用AJAX渲染时,此部分的if语句未正确计算?我该如何解决这个问题?

这是破坏行动:

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

这是在destroy.js.erb中。它呈现包含上面第一个代码块的部分:

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

1 个答案:

答案 0 :(得分:0)

ActiveRecord缓存关联的对象。运行@showable_video.destroy后,current_user(本身可能正在缓存)内存中仍会有@showable_video,因此集合将为非空。创建,更新或删除数据库记录后,您必须运行:

current_user.reload

以便从数据库重新加载关联的对象。