2014-06-23 47 views
0

我覺得應該有一個非常簡單的解決方案...但我找不到它。使動態生成的選擇框值在形式參數中可用

我正在使用jquery動態生成一個選擇框內的依賴於另一個選擇框的窗體。我認爲表單代碼的

提取物:

form_for @unit do |f| 

    <td> f.collection_select :shop_id, @shops, :id, :name </td>  # this is the first select box 

    <td id="options"></td>  # this is the id tag that jquery finds and replaces with the second select box, depending on the value of the first select box 

以我的application.js我有抓住第一選擇框的值,並把它發送到我的控制器內的功能:

jQuery(function($) { 

    // when the #shop field changes 
    $("#unit_shop_id").change(function() { 

    var shop_id 
    shop_id = $('select#unit_shop_id :selected').val(); 

    // make a GET call and replace the content 
    jQuery.get('/units/options/' + shop_id) 
    return false; 
    }); 
}); 

,並在我的units_controller我設置的選項基礎上,shop_id第二個選擇框,並調用js.erb文件:

def options  # note params[:id] is the shop_id specified by the first select box 

    if params[:id] == 0 
     @options = ["Yes", No", "Maybe"] 
      elsif params[:id] == 1 
       @options = ["Yes", Maybe"] 
      else 
       @options = ["Yes"] 
      end 

    respond_to do |format| 
     format.js {} 
    end 
end 

options.js.erb文件dynamiclaly顯示我的第二個選擇框:

$("#options").html("<%= escape_javascript(select("product_id", @options)) %>"); 

這一切都完美。我的表單顯示,當我在第一個選擇框中選擇一個值時,它決定了我的第二個選擇框中的可用選項。

我正在努力的是如何將我的第二個選擇框中選擇的值添加到窗體參數。

生成的表單PARAMS是:

"unit"=>{"shop_id"=>"x"} (i.e. only the first select box) 

我要生成形式PARAMS包括第二個選擇框的jQuery動態生成的,即:

"unit"=>{"shop_id"=>"x", "product_id=>"y"} 

不知道如何可以做到這一點?我試過在product_id的form中使用hidden_​​field,但我似乎無法成功引用product_id。

+0

這一次運氣好嗎?我的答案是否適合你? –

回答

0

望着文檔爲select,它看起來像select定義如下:

select(object, method, choices = nil, options = {}, html_options = {}, &block) 

我認爲,同時使用對象unit)和方法product_id)應該給你期望的行爲。

$("#options").html("<%= escape_javascript(select("unit", "product_id", @options)) %>"); 
相關問題