值不绑定到控制器的视图

时间:2017-03-10 11:21:55

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

我有两个选择标签,如下所示

 <%= 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,它必须工作。

1 个答案:

答案 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