Rails 3.1 Jquery Ajax CRUD Операции

Я работаю над демо-приложением Rails 3.1 Jquery Ajax, перечисленным здесь https://github.com/samnang/ajax_rails31_demo . Я пытаюсь добавить код для удаления комментариев. Я изменил comments_controller.rb и добавил действие уничтожения. Я также добавил ссылку на app/views/_comment.html.erb, чтобы включить ссылку «Уничтожить». Я могу удалить комментарий, и количество комментариев уменьшается на 1, но частичный комментарий не обновляется, удаляя запись. Только при обновлении страницы страница отображается правильно. Вот мой код

приложение/контроллеры/comments_controller.rb

class CommentsController < ApplicationController
  respond_to :html, :js

  def index
    @comments = Comment.all
  end

  def create
    @comment = Comment.new(params[:comment])
    @comment.save

    respond_with @comment, :location => comments_url
  end

  def destroy
    @comment = Comment.find(params[:id])
    @comment.destroy

    respond_with @comment, :location => comments_url
  end
end

приложение/просмотры/комментарии/index.html.erb

<% title "Comments for Ajax in Rails 3.1" %>

<div id="comments_count"><%= comments_count %></div>

<div id="comments">
   <%= render @comments %>
</div>

<h3>Add your comment:</h3>

<%= form_for Comment.new, :remote => true do |f| %>
<%= f.error_messages %>
   <p>
    <%= f.label :name %><br />
    <%= f.text_field :name %>
   </p>
   <p>
    <%= f.label :content, "Comment" %><br />
    <%= f.text_area :content, :rows => '12', :cols => 35 %>
   </p>
  <p><%= f.submit %></p>
<% end %>

приложение/представления/комментарии/_comment.html.erb

<div class="comment">
  <strong><%= comment.name %></strong>
  <em><%= comment.created_at.strftime('%b %d, %Y at %I:%M %p') %></em>
  <%= simple_format comment.content %>
  <%= link_to "Destroy", comment,:remote => true,  :confirm => "You Sure", :method => :delete %>
</div>

приложение/виды/комментарии/create.js.coffee

$('<%= escape_javascript(render(:partial => @comment))%>')
  .appendTo('#comments')
  .hide()
  .fadeIn()

$('#new_comment')[0].reset()

$('#comments_count').html '<%= comments_count %>'

приложение/просмотры/комментарии/destroy.js.coffee

$('#new_comment')[0].reset()

$('#comments_count').html '<%= comments_count %>'

Я считаю, что я ошибаюсь в части уничтожения jquery. Как перезагрузить партиал, чтобы удалить удаленный комментарий?


person ctilley79    schedule 27.09.2011    source источник


Ответы (1)


Я обновил свой пример на Github для поддержки действия уничтожения. В вашем примере вы не удалили элемент dom в файле destroy.js.coffee. Снова просмотрите полный код на Github или посмотрите фрагменты ниже:

приложение/представления/комментарии/_comment.html.erb

<div id=<%= dom_id(comment) %> class="comment">
  <strong><%= comment.name %></strong>
  <em>on <%= comment.created_at.strftime('%b %d, %Y at %I:%M %p') %></em>
  <%= link_to "Remove", comment, :method => :delete, :remote => true %>
  <%= simple_format comment.content %>
</div>

приложение/просмотры/комментарии/destroy.js.coffee

$('#comments_count').html '<%= comments_count %>'

$('#<%= dom_id(@comment) %>')
  .fadeOut ->
    $(this).remove()
person Samnang    schedule 28.09.2011