2014-01-08 35 views
1

簡單地說, 我有2個下拉列表。 第一個賬戶。Rails 2.3.x使用Prototype.js和「select」助手進行Ajax調用

我想要做的是:從第一個下拉列表中選擇一個帳戶,選擇所選帳戶的ID,使用該「id」從db獲取信息,然後用「Ajax調用」填充第二個下拉列表」。

聽起來很簡單,但我無法建立關係。

的Rails:2.3.5 JS:的Prototype.js 紅寶石:1.8.7

降下來,我嘗試使用(我真的不知道什麼是怎麼回事:平變化)

<%= select :account, :id 
      @accounts.map{ |a| [ a.company a.id ] }, 
      { :include_blank => "--Select Account--"}, 
      :onchange => my_function() #I guess 
%> 

我的控制器名稱:用戶,操作:search_user

問題:如何選定的賬戶的ID發送到我的控制器,然後填充第二個下拉,我應如何修改「:平變化=>創建my_function」我必須寫信嗎?任何JS或幫助函數都能幫我嗎?

我搜索了很多,但我找到部分答案(因爲我的rails版本是非常古老的)。所以任何答案都會有很大幫助。

解決方案:

感謝SantoshUmut Sirin我想通了。這裏是如何做到這一點:

1)下拉使Ajax調用填充

<%= select :account, :id 
     @accounts.map{ |a| [ a.company a.id ] }, 
     { :include_blank => "--Select Account--"}, 
     :onchange => "my_function()" %> 

2)下拉:

<select id="subaccounts" name="subaccount[id]"></select> 

3)的Prototype.js代碼,以使阿賈克斯打電話填充第二下拉:

<script type="text/javascript"> 
function my_function(){ 
var selectBox = $('account_id'); 

if(selectBox.selectedIndex === 0) { 
    return; 
} 

var selectedValue = selectBox.options[selectBox.selectedIndex].value; 
selectedValue = parseInt(selectedValue); 

var subaccSelectBox = $('subaccounts'); 
new Ajax.Request('/controller_name/action_name_here/', { 
    method: 'get', 
    parameters: {id: selectedValue}, 
    onSuccess: function(transport) { 
     var options = transport.responseJSON; 
     for(var i = 0, len = options.length; i < len; i++) { 
      var opt = document.createElement('option'); 
      opt.text = options[i].text; 
      opt.value = options[i].value; 
      subaccSelectBox.options.add(opt); 
     } 

    } 
}) 

}

4)控制器動作JSON對象返回JS功能:

def action_name_here 
    id = params[:id] 

    info= Model.find(#whatever you want to do wit "id") 
    render :json => info 
end 

回答

1

:onchange => "my_function(this)"

function my_function(obj) { 
    new Ajax.Request('/your/url', { parameters: obj.value }) 
} 
+0

它不工作是什麼「這個」軌在視圖中不也認識到它「未定義方法「錯誤生成。也許是因爲版本的差異。 – bkdir

+0

更新了我的答案。函數調用應該在引號內。它是一個js方法調用。 – Santhosh

+0

感謝您的糾正,「這」仍然是不必要的,但主要想法爲我工作。我會盡量發佈完整的正確答案。 – bkdir