1

在我的 Rails 控制器中,我有这样的东西:

def index
  provider_id = params[:provider] ||= 'all'
  thera_class = params[:therapeutic_class] ||= 'all'
  med_name = params[:medication_name] ||= 'all'

在 JavaScript 端,我将这些参数作为 URL 查询参数传递,所以当它被调用时,它会转到这个 Index 操作方法:

window.open("http://localhost:3000/pharmacy/patients?provider="+provider_id+"&"+"therapeutic_class="+thera_class+"&"+"medication_name="+medication_name);

问题是我传递的 JavaScript 值,如果它们没有值并且未定义,它们将作为未定义传递。

我更关心的是我这样做在架构上是否有太多错误?这样做的“Rails 方式”是什么?特别是从 Javascript 到 Rails 控制器的路由并将参数传递给它是我需要您的架构输入的地方。

4

1 回答 1

0

当您使用 Javascript 在客户端获取信息时,我猜您会初始化变量 provider_id、treatment_class 等。像这样:

var provider_id = $('#provider').val();
var thera_class = $('#therapeutic_class').val();
# etc.
# and then you do:
window.open("http://localhost:3000/pharmacy/patients?provider="+provider_id+"&"+"therapeutic_class="+thera_class+"&"+"medication_name="+medication_name);

如果是,我建议您这样做:

var url = "http://localhost:3000/pharmacy/patients?";
var params = { };
var params_names = [ 'provider', 'therapeutic_class', 'medication_name' ];
$.each(params_names, function(i, param_name) {
  var value = $('#'+param_name).val();
  if(value !== undefined && value != '') {
    params[param_name] = value;
  }
})
$.each(params, function(key, value) {
  url += key + "=" + value + "&";
})
window.open(url)
于 2013-08-15T18:09:22.820 回答