Частичная визуализация с AJAX не работает правильно - PullRequest
0 голосов
/ 14 мая 2011

Я отрисовываю эту часть с помощью 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> всегда отображается. Если я обновлю страницу, она будет исправлена. Почему оператор if этого частичного не оценивается правильно при визуализации с помощью AJAX? Как я могу это исправить?

Вот действие по уничтожению:

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 голосов
/ 14 мая 2011

ActiveRecord кэширует связанные объекты.После запуска @showable_video.destroy, current_user (сам, вероятно, кэшируемый) все равно будет иметь в памяти @showable_video, поэтому коллекция будет не пустой.После создания, обновления или удаления записи базы данных вы должны выполнить:

current_user.reload

, чтобы он перезагрузил связанные объекты из базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...