1

私のレールコントローラーには、次のようなものがあります。

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、治療クラスなどを初期化すると思います。次のようなものです。

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 に答える