我用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
这是在销毁.js.erb。它呈现包含上述第一个代码块的部分:
$("#shown_users_div").html('<%= escape_javascript(render("showable_videos/shown_users")) %>')
ActiveRecord 缓存关联的对象。运行 @showable_video.destroy
后,current_user
(本身可能被缓存)仍将在内存中具有 @showable_video
,因此集合将是非空的。创建、更新或删除数据库记录后,必须运行:
current_user.reload
以便它从数据库重新加载关联的对象。