2010-12-16 44 views
2

我對Rails和web開發人員相當新穎。我需要顯示兩個下拉菜單,州和學校,以便學校只在用戶選擇州後顯示,學校只應顯示所選州的學校。我不知道的是,我可以如何使用州選擇動態決定要顯示哪些學校,而無需用戶點擊提交。我知道我可能需要使用JavaScript,但不知道JS,我不確定如何去做。希望我有道理。謝謝!Rails:使用下拉菜單中的輸入而無需發帖

回答

3

這裏是a simple example動態填充基於JavaScript中已有數據結構的選擇。如果您需要在用戶選擇狀態並返回學校列表後執行服務器請求,則需要使用不同的代碼(並且有助於像jQuery這樣的庫)。

+0

行爲正是我想要的,但是你的變量是在JS中聲明的。我想用Ruby中定義的@states和@schools數組填充下拉列表(在控制器中精確地)。任何提示? – 2010-12-16 21:49:46

+1

您的控制器設置您的數據。您的觀點將數據和創建內容發送到Web瀏覽器。 JavaScript,HTML和CSS都是瀏覽器可以理解的內容。一些選項:a)在你的頁面視圖中用你的實例變量發出一個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在軌道1不同......但這個想法是一樣的。你有一些JavaScript附加到你的狀態下拉列表,以便當它改變時,你拉出該狀態的ID並進行AJAX調用您的控制器。該AJAX調用的最後一個參數是一個成功函數,它遍歷控制器發回的所有學校,清除學校下拉列表,並將選項逐個添加到下拉列表中。