2012-01-08 9 views
0

これは非常に単純なものでなければならないと思っています。無駄な検索をした後は、単純すぎるようです。ドロップダウンフィールドを使用したルックアップ形式

私は2つのモデルを持っています:クライアントと:仕事。クライアントには多くのジョブがあり、ジョブはクライアントに属します。私のroutes.rbをで

次のように私は、ネストされたリソースを持っている:

resources :client do 
    resources :job 
end 

次のパスを手動で入力が問題を解決していない:私は持っていると思いますどのような

/client/:client_id/job 

は単純なものですすべてのクライアントをリストし、送信時に選択したclient_idを使用して上記のパスを指す、ジョブ索引ページのドロップダウン選択フォーム。

I/index.erbビュー/ジョブ内の次の形式を持って提出上に解決

<%= form_tag(client_index_path, :action => 'index', :method => 'get') do %> 
    <%= collection_select ("job", "client_id", Client.all, "id", "name", {:include_blank => 'Filter by client'}) %> 
    <%= submit_tag 'Go' %> 
<% end %> 

<select id="job_client_id" name="job[client_id]"> 
    <option value="">Filter by client</option> 
    <option value="1">client1</option> 
    <option value="2">client1</option> 
    <option value="3">client2</option> 
</select> 

/client?utf8=✓&job%5Bclient_id%5D=2&commit=Go 

これは、レールによって生成されたHTMLです

ご協力いただきありがとうございます。ありがとうございます。

答えて

1

あなたはJavaScriptを使わずに純粋なhtmlでこれを行うことはできません。フォームはPOSTまたはGETパラメータ(/ clientの後ろにあるもの)を介してデータが提供された状態で、常に1つのURLに送信されます。

2つのオプションがあります。

JavaScriptが有効になっている場合は、送信ボタンを乗っ取ってURLを構築してください。

$("#form").submit(function(){ 
    client_id = $("#job_client_id").val(); 
    window.location = '/client/' + client_id + '/job/'; 
    return false; // don't sumbmit the form 
}) 

EDIT:このような何かがここで働い例です:http://jsfiddle.net/Fj5Kh/1/

あなたの2番目のオプションは、実際のサーバーにフォームを送信し、そこにリダイレクトを行うことです。これは余分なサーバー呼び出しですが、javascriptなしで動作します。フォームを理解し、redirect_to行を使用する特殊なコントローラーアクションを作成します。

+0

ありがとうスパイク!私はほとんどjavascriptのソリューションと思う。フォームにonsubmitやアクションを追加する必要がありますか? – user1137277

+0

yea、申し訳ありません、私はサンプルコードのためにjqueryを使用していました。純粋なJSを使用している場合は、フォームのonsubmitハンドラを設定する必要があります(jQueryがロードされている場合は$( "#form")submit(ハンドラ)が行います)。 – spike

+0

大変感謝しています - jqueryがロードされています。それはまだ選択された価値を取り上げているようではありません。私はデバッグしようとしましたが、それはドロップダウンの最初の選択されたテキスト値を得ることができるように思えますが(.textと関数の後半を使用して)、私は.valueで置き換えると、選択された値を返しません。私が間違っていることを確信していない。 – user1137277

関連する問題