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 によって渡された場合、なぜ問題になるのでしょうか? ちなみに、異なるデータセットで同じことを試しましたが、同じ効果がありました。