0

DataTable を介してデータを表示し、ユーザーが行を選択したことを検出します。次に、その行の編集フォームをロードしたいと思います。

var oTable;

$(document).ready(function() {

/* Init the table */
TableTools.DEFAULTS.aButtons = [];
oTable = $("#neighbours").dataTable({
     sPaginationType: "full_numbers",
     bJQueryUI: true, 
     "bProcessing": true,
     "bServerSide": true,
     iDisplayLength: 25,
     sAjaxSource: $('#neighbours').data('source'),
     "aoColumns": [
        null,
        null,
        null,
        null,
        null
     ],
     "sDom": 'T<"clear">lfrtip',
     "oTableTools": {
       "sRowSelect": "single",
       "fnRowSelected": function ( node ) {
         var oTT = TableTools.fnGetInstance('neighbours');
         var aData = oTT.fnGetSelectedData();
         // alert (aData[0][4]);
        n = aData[0][4];
        $.get('edit/' + n); 
       }
     },  

});

私の関連するコントローラーコード:

def edit
  logger.debug "Edit in Controller for Neighbour ID #{params[:id]}"
  @neighbour = Neighbour.find(params[:id])
  @localities = Locality.find(:all)
  @highways = Highway.find(:all)
end

ログから、正しい ID がコントローラーに渡されたことを確認でき、WebBrick は、この抜粋が示すように、ビューがレンダリングされたことを報告します。

Started GET "/neighbours/edit/39" for 127.0.0.1 at 2012-08-08 18:10:20 +1000
Processing by NeighboursController#edit as */*
Parameters: {"id"=>"39"}
Edit in Controller for Neighbour ID 39
Rendered neighbours/_form.html.erb (4341.0ms)
Rendered neighbours/edit.html.erb within layouts/neighbours (4410.0ms)
Completed 200 OK in 5564ms (Views: 4479.6ms | ActiveRecord: 28.0ms)

ビューはブラウザーに表示されません。ただし、ブラウザーのアドレス バーに localhost:3000/neighbours/edit/39 と入力するか、フォーム ヘッダーにリンクを配置すると、ビューは正常にレンダリングされます。ログで確認できる唯一の違いは、次の行です。

Processing by NeighboursController#edit as */*

ブラウザまたはリンクを介して直接ロードすると、次のように表示されます。

Processing by NeighboursController#edit as HTML

どちらの場合もコントローラーはIDを正しく取得するだけなので、何が悪いのかわかりません。ID が JavaScript によって渡された場合、なぜ問題になるのでしょうか? ちなみに、異なるデータセットで同じことを試しましたが、同じ効果がありました。

4

1 に答える 1

0

編集コードのコントローラーが問題を明らかにする可能性があります。デフォルトのコードは HTML と JSON のデータのみを返すため、この呼び出しでは何も返さない可能性があります。大文字と小文字を区別しないで、常に HTML を返すことを検討してください。

これはデフォルトのコードです:

respond_to do |format|
  format.html # new.html.haml
  format.json { render json: @shop }
end

これを変更して、この case ステートメントの代わりに render を呼び出すだけで html が返されるように強制します。

ところで: */*:all の略

于 2012-08-08T09:24:23.777 に答える