2012-05-10 9 views
2

2つのモデルがあるとします:お客様注文です。 すべての注文は顧客に属します。Datatables検索と列フィルタの状態をurl paramsで動的に設定する方法は?

また、すべての注文を表示するDatatableで注文(インデックス)ビューを設定しました。 特定の顧客のすべての注文を表示するには、その顧客の関連する顧客名を「検索」フィールドに入力するか、列フィルタフィールドからその顧客を選択して結果をフィルタリングする必要があります。

私はこれらの設定で注文Datatableを自動的に表示する顧客注文リンクを実装したいと思います。

つまり、/ orders?isearch = 'customer_name + customer_surname'は、検索フィールド(またはそれに応じて顧客列フィルタセット)に書き込まれた顧客のフルネームでDatatableを表示します。 。もちろん

私は、コントローラから@customerインスタンス変数を取得し、ビューに渡したが、その後ことができますか?インクリメンタルサーチ値を考慮して適切な隠しフィールドに格納され

$(document).ready(function() { 

    var isearch = $('#isearch').val() 

    $('#example').dataTable({ 
    "oSearch": {"sSearch": isearch} 
    }); 
}) 

:私は検索フィールドの初期値を定義することができ、初期化コードで oSearch変数、インクリメンタルサーチ変数を使用して

答えて

5

<%= hidden_field_tag "isearch", @isearch.to_s, { :id => "isearch" } %> 

これは、私はRailsので.jsファイルにインスタンス変数を渡すためにこれまでに見つかった最良の方法です)。

なく、少なくとも最後に、@isearchインスタンス変数がorder_controllerから設定されます。その値は以下のようにURLに渡す必要がありますもちろん

@isearch = params[:isearch] 

.../orders?isearch='customer_name+customer_surname' 

--- --ADDENDUM ----

私はインスタンス変数を必要としないことを理解しました。実際、私はこのjaを使用したいだけ多くのURLパラメータを渡すことができますvascript機能:

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変数を設定することができますが、これらの値にAccordinデータテーブルを使用して列固有のものaoSearchCols初期化パラメータ(http://www.datatables.net/ref#aoSearchCols

最後の問題私が選択した要素(http://www.datatables.net/release-datatables/examples/api/multi_filter_select.html)で個々の列フィルタリングを使用しているので、URL通過したパラメータに従ってすべての選択要素を設定してください。 私はこのjQueryの命令でそれをやった:

// sets all select filters according to url passed params 
$('select').val([customer_name, preparation_kind, preparation_status]); 

のパフォーマンスの観点から、このソリューションは、改善可能であるが、その簡単で、それが動作します。

関連する問題