2010-12-16 9 views
2

私はRailsとWeb devには一般的には初めてです。ユーザーが州を選択した後にのみ学校が表示され、学校は選択された州に学校を表示するように、2つのドロップダウンメニュー、州と学校を表示する必要があります。私が知らないのは、州の選択肢を使ってどの学校を表示するかをユーザーが動的に決定する方法です。ユーザーはSubmitをクリックする必要はありません。私はJavaScriptを使う必要があるかもしれないと理解していますが、JSをよく知っているわけではありません。私は理にかなっていると思います。ありがとう!Rails:投稿なしでドロップダウンメニューからの入力を使用する

答えて

3

ここには、JavaScriptに既に含まれているデータ構造に基づいてselectを動的に生成するa simple exampleがあります。ユーザーが状態を選択して学校リストを返した後にサーバー要求を実行する必要がある場合は、別のコード(および有益にはjQueryのようなライブラリ)が必要になります。

+0

動作はまさに私が望むものですが、変数はJSで宣言されています。 Rubyで定義されている@statesと@schools配列のドロップダウンを(正確にはコントローラ内に)配置したいと思います。何かヒント? –

+1

コントローラがデータを設定します。あなたのビューはデータを受け取り、Webブラウザに送信するためのコンテンツを作成します。 JavaScript、HTML、CSSはすべてブラウザが理解できるコンテンツです。いくつかのオプション:a)ページビューでは、正しいJavaScriptテキストを作成するインスタンス変数を持つHTMLの '

2

あなたはAJAXでこれをしたいと思います。私はこれをRails 1用にカスタマイズするつもりはありませんが、そのアイディアに従うことができます。最初のドロップダウンには州のリストがあり、各州には学校のリストがあります。

// some js file that's loaded from your layout 
// When your states dropdown is changed it fires an ajax call 
var success = function(response) { 
    for (var school in response.schools) { 
    $('#schools_dropdown').html(''); 
    var option = $(document.createElement('option')).html(school.name).val(school.id); 
    option.appendTo($('#schools_dropdown')); 
    } 
}); 

$('#states_dropdown').change(function() { 
    $.get('/state/' + $(this).val() + '/schools', success); 
}); 

# your schools controller 
def index 
    @schools = State.find(params[:id]).schools 
    respond_to do |format| 
    format.js { render :json => @schools } 
    end 
end 

多分jQueryを持っていない可能性があります。レンダリングjsonはRails 1では違いますが、アイデアは同じです。州のドロップダウンにいくつかのjavascriptが添付されているので、それが変わったときにその州のIDを取り出して、あなたのコントローラにAJAX呼び出しを行うようにします。そのAJAX呼び出しの最後のパラメータは、コントローラによって返送されたすべての学校をループし、学校のドロップダウンをクリアし、ドロップダウンにオプションを1つずつ追加する成功関数です。

関連する問題