初期化コードでoSearch変数を使用すると、検索フィールドの初期化値であるisearch変数を定義できます。
$(document).ready( function() {
var isearch = $('#isearch').val()
$('#example').dataTable( {
"oSearch": {"sSearch": isearch}
} );
} )
isearch値は、ビューの適切な非表示フィールドに保存されます。
<%= hidden_field_tag "isearch", @isearch.to_s, { :id => "isearch" } %>
(これは、Railsの.jsファイルにインスタンス変数を渡すためにこれまでに見つけた最良の方法です)。
最後になりましたが、@isearchインスタンス変数はorder_controllerから設定されます。
@isearch = params[:isearch]
もちろん、その値は次のようにURLに渡す必要があります。
.../orders?isearch='customer_name+customer_surname'
----補遺----
インスタンス変数は必要ないことがわかりました。実際、このjavascript関数を使用して、必要な数のurlパラメーターを渡すことができます。
function getUrlParam( name )
{
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
var regexS = "[\\?&]"+name+"=([^&#]*)";
var regex = new RegExp( regexS );
var results = regex.exec( window.location.href );
if( results == null )
return "";
else
return results[1].replace("+", " ");
}
次に、次のように.jsファイルからそれらをフェッチできます。
// fetches url params
var isearch = getUrlParam('isearch');
var customer_name = getUrlParam('customer_name');
var order_status = getUrlParam('order_status');
これらの値に従って、oSearch変数を設定できるだけでなく、Datatables aoSearchCols初期化パラメーター(http://www.datatables.net/ref#aoSearchCols)を使用して列固有の設定もできます。
解決する最後の問題は、select要素(http://www.datatables.net/release-datatables/examples/api/multi_filter_select.html)で個別の列フィルタリングを使用しているため、URLに従ってすべてのselect要素を設定することです。 -渡されたパラメータ。私はこのjQuery命令でそれを行いました:
// sets all select filters according to url passed params
$('select').val([customer_name, preparation_kind, preparation_status]);
パフォーマンスの観点から、このソリューションは改善可能ですが、簡単で機能します。