2

初心者の質問で申し訳ありませんが、Rails と jQuery を使い始めたばかりです。次のシナリオがあります。

contactscompaniesおよびcontact_company_joins(ccj)の3つのクラスがあります。私が作成した 3 つのクラスすべてについてmodelscontrollerおよびviews. 明らかに、連絡先と会社は結合テーブル ccj (を使用has_many :through) を介して接続されます。

contacts <-> contact_company_joins <-> companies

連絡先の「表示」ビューで、連絡先が接続されているすべての会社 (および電話番号などの会社自体に関する追加情報) を一覧表示するテーブルを表示したいと考えています。私の会社の見解では、私は同じことをしたいと考えていますが、今回は従業員 (連絡先) の詳細についてです。テーブルの各行には、最後に典型的な「削除」リンクがあり、その関数を jQuery 関数の 1 つに接続しました。

$('.edit_contact_join_delete').livequery('click', function() {
    var $deleteButton = $(this);
    var answer = confirm("Sure?");
    var dataloc = "&_method=delete";
    if (answer) {
     $.ajax({
          type : "POST",
          url  : this.href,
          data : dataloc,
          success: function(result) {
          }
        });
    }
    return false;
  });

両方のビュー (連絡先と会社) で、削除アクションによって ccj コントローラーの破棄機能が表示されます。私が今やりたいことは、削除機能を呼び出している個々のサイト (連絡先または会社) のテーブルを更新または再レンダリングすることですが、テーブルの一部のみです。上記の「成功」関数で実装する必要があると思いますか?しかし、繰り返しになりますが、ccj のコントローラーから何かを返したとしても (レンダリングされた部分的なものですか?)...それは連絡先ビューと会社ビューの両方で同じですよね? ccj オブジェクトを破棄するための Ajax 呼び出しの後、連絡先のビュー (新しい会社のテーブル) 用の新しい DOM オブジェクトを取得するだけでなく、私の会社の見解?

これがすべて理にかなっていることを願っています:-)

よろしく、

セバスチャン

4

1 に答える 1

2

必要なのは、削除アクションが成功または失敗を返すことだけです (true または false だけでも構いません)。その後、JavaScript はどちらの応答も処理できます。

失敗するとメッセージが返され、成功して関係が削除された場合は、クリックした削除リンクの <tr> 親が見つかり、行がフェード アウトし、最終的にページから削除されます。例 (削除が成功した場合はコントローラーが true を返し、それ以外の場合は false を返すとします):

$('.edit_contact_join_delete').livequery('click', function() {
    var $deleteButton = $(this);
    var answer = confirm("Sure?");
    var dataloc = "&_method=delete";
    if (answer) {
     $.ajax({
          type : "POST",
          url  : this.href,
          data : dataloc,
          success: function(result) {
            if (result) {
              // handle successful delete
              $deleteButton.parent('tr').fadeOut().remove()
            } else {
              // handle failed delete
              alert('Delete failed');
            }
          } 
        });
    }
    return false;   
  });
于 2008-11-04T21:30:07.950 に答える