我覺得應該有一個非常簡單的解決方案...但我找不到它。使動態生成的選擇框值在形式參數中可用
我正在使用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。
這一次運氣好嗎?我的答案是否適合你? –