1

選択ボックスと3つのテキスト入力ボックスを備えたフォームがあります。選択ボックスのオプションが変更されたら、選択したオプションに対応する値で3つのテキスト入力ボックスを更新したいと思います。値はサーバーに保存されているモデルオブジェクトです。

Rails 3を使用していて、物事を邪魔にならないようにしようとしていますが、これを行うためのクリーンな方法を見つけることができません。私はいくつかの恐ろしい、厄介な解決策を思いついたが、まだきれいなものは何もない。これをすべて結び付けるための良い方法は何でしょうか?特に、サーバーからモデルオブジェクトを要求するselect要素で問題が発生しています。

フォームを生成するビューは次のとおりです。

= form.select :region_id, region_options_for_select(@business_location.region), :prompt => '-- Region --'
= form.text_field :city
= form.text_field :state, :label => 'Province/State'
= form.text_field :country

したがって、「地域」が変更されるたびに、市/州/国のフィールドにデータを入力したいと思います。リージョンもフォーム自体の一部であることに注意してください。

4

1 に答える 1

3

jQueryでは、次のようなものが機能する可能性があります。

$("select").live("change", function(e) {
  e.preventDefault();
  $.ajax({
    url: "/location/" + $(this).val(), //I think, it could be something else
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function(data) {
      //you're returning a JSON object, so just iterate through it and bind it to
      //the value attributes of each field
    },
    error: function(xhr,exception,status) {
      //catch any errors here
    }
  });
});

Rails側では、LocationsController#showで次のようになります。

@location = Location.find(params[:id])
respond_to do |format|
  format.json { render :json => @location.to_json, :status => 200 }
end

それは大まかにそれがどのように機能するかです。私が作ったものをあなたが持っているコントローラー/モデル名に置き換えてください。

于 2011-03-16T20:27:33.987 に答える