我有两个选择标签,如下所示
<%= f.select(:floor_id, ProjectFloor.find(:all,:order => "name ASC",:conditions => ["project_id = ?", @project.id]).collect{|b|[b.name, b.id]}, {:include_blank => 'Select'}) %>
<%= f.select(:unit_id, @floor.collect{|b|[b.name, b.id]}, {:include_blank => 'Select'}) %>
当用户在名为:floor_id
的第一个选择标记上选择值时,应将选择标记数据的值加载到:unit_id
选择标记
我尝试以下方法来读取和获取数据但是。 floor_id始终接收 null
我的控制器方法如下:
@floor_id = params[:floor_id]
@project = Project.find(params[:project_id])
@proposed_customer = ProposedCustomer.new
@floor = ProjectFloorUnit.select_units(@project.id, @floor_id)
select unit方法适用于静态值,因此如果我们传递正确的param,它必须工作。
答案 0 :(得分:2)
当页面完全加载时,它会与服务器断开连接。因此,您需要发起一个单独的请求,请求的响应将在第二个下拉列表中更改值或任何您想要的值。
您可以使用jQuery发送新请求:
$("#floorIDSelectTag").change(function() {
var floorID = $(this).val();
$.ajax({
type: '',
url: '',
// other things
success: function(data) {
// Here, you need to use the data from the request's response,
// and update the things in 2nd dropdown
}
});
});
您将在AJAX调用中使用的URL是什么?为此,您需要在config/routes.rb
文件中构建新路由,在控制器中创建新操作,并以JSON格式发回数据。如下所示:
def get_data_for_floor_id
@floor_id = params[:floor_id]
# Do the other stuff, and prepare the response you need to send.
respond_to do |format|
format.json { }
end
end