0

ajaxコメントの送信と削除があります。送信は完全に機能しますが、削除が機能しません。

以下は私のコードです:-

コントローラ

def destroy
  @status_update = StatusUpdate.find(params[:id])
    if @user == current_user
      if @status_update.destroy
        respond_with do |format|
          format.html do
            if request.xhr?
              render :partial => "users/post_status_update", :locals => {:user => @user}, :layout => false, :status => :created
            else
              redirect_to @user
            end
          end
        end
      end
    end
  end

Javascript

$(document).ready(function(){

  $('.delete-status-update')
    .on("ajax:beforeSend", function(evt, xhr, settings){
    })

    .on("ajax:success", function(evt, data, status, xhr){
      $('.status-partial').replaceWith(xhr.responseText);

    })

});

意見

.status-partial
  -@user.status_updates.latest.limit(5).each do |status_update|
    .row-fluid.cycle-status-update{:class => cycle("dark", "light")}
      .row-fluid
        .span11
          = status_update.status
        .span1
          .delete-status-update-link
            %strong= link_to "X", [@user,status_update], :remote => true, :method => :delete, :class => "delete-status-update"
      .row-fluid
        .time-ago-in-words
          ="#{time_ago_in_words(status_update.created_at)} ago"

問題は、削除リンクをクリックするとステータスパーシャルが置き換えられないことです。ページを更新した後、ajax削除が初めて機能し、その後再び機能しなくなります。

4

3 に答える 3

1

あなたは不必要にすべてを複雑にしている。破棄コントローラーは次のように単純にすることができます。

def destroy
  @status_update = StatusUpdate.find(params[:id])
  if @user == current_user
    unless @status_update.destroy
      redirect_to @user
    end
  end
end

あなたの見解では、$。ajaxを介して呼び出す代わりに、railsを試してくださいlink_to "action", action_path, remote: true

HTMLビューファイルにdestroy.js.erbという名前を付けます。

これらはその内容である可能性があります:

$('.status-partial').html(<%= @user.generate_new_content.to_s %>);

残りはRailsが処理します。リンクをクリックすると、クラス'status-partial'の要素のhtmlコンテンツが"somenewcontent"に置き換えられます。

HTMLとAJAXの応答を分離することは良い習慣であり、Railsはそれを行うための便利な方法を提供します。これを使って。

于 2013-02-08T08:13:58.550 に答える
0

問題は、javascriptファイルで使用される構文にありました。.onのようには機能しません.live。構文を次のように変更します

$(document).ready(function(){

  $(document).on("ajax:success", "#create_status_update_form", function(evt, data, status, xhr){
      $('.status-partial').replaceWith(xhr.responseText);
      $('.comment-text').val('');
    })

});

問題を解決しました。

于 2013-02-11T04:57:23.523 に答える
0

やったほうがいいと思います

respond_with do |format|
format.js

destroy.js.erb次に、削除後に起動する必要があるjavascriptを配置するために呼び出されるファイルがあります

于 2013-02-08T05:52:31.657 に答える