所以我用这个我写的小程序解决了几乎所有的问题:
唯一剩下的,就是我只是打我的头,就像这样。
这是您的标准两个下拉菜单,选择一个项目以填充另一个。
在我看来:
<%=
select_tag(
:contractor_id,
options_from_collection_for_select(Contractor.all, "id", "appointment_record"),
:'data-remote' => 'true',
:'data-url' => url_for(:controller => 'contractors', :action => 'getdata'),
:'data-type' => 'json')
%>
<%=
select_tag(
:company_id, # name of selectbox
)
%>
在我的控制器中:
def getdata
@data_from_select1 = params[:contractor_id]
@data_for_select2 = Company.where(:id => @data_from_select1).all
# render an array in JSON containing arrays like:
# [[:id1, :name1], [:id2, :name2]]
render :json => @data_for_select2.map{|c| [c.id, c.name]}
end
在我的application.js中:
$(document).ready(function() {
$('#contractor_id').live('ajax:success', function(evt, data, status, xhr) {
var selectbox2 = $('#company_id');
selectbox2.empty();
$.each(data, function(index, value) {
// append an option
var opt = $('<option/>');
// value is an array: [:id, :name]
opt.attr('value', value[0]);
// set text
opt.text(value[1]);
// append to select
opt.appendTo(selectbox2);
});
});
});
在我的路线中:
get 'getdata' => 'contractors#getdata'
而我根本没有得到任何填充公司的东西。永远不会!
Contractor.id填充得很好,所有名称都在那里填写,但没有任何内容返回给company.id
我是一个巨大的noobie,所以我确定我在这里遗漏了一些东西。什么?
答案 0 :(得分:0)
您是否尝试过以不同方式添加选项?例如
var selectbox2 = $('#company_id');
var option = document.createElement("option");
//Adds the value
option.value = value[0];
// Adds in text
option.innerHTML = value[1];
// Appends the option to you select box
selectbox2[0].appendChild(option);
你可以使用console.log(value);并查看您是否收到了填充的回复。