2011-03-16 5 views
1

양식이 선택 상자와 3 개의 텍스트 입력 상자가 있습니다. 선택 상자의 옵션이 변경되면 세 개의 텍스트 입력 상자를 선택한 옵션에 해당하는 값으로 업데이트하려고합니다. 값은 서버에 저장된 모델 객체입니다.레일 선택 요소가 변경 될 때 양식의 내용 업데이트

저는 레일즈 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 

그래서 내가 "지역"이 변경 될 때마다 도시/주/국가 필드를 채우는하고자 :

다음은 양식을 생성하는 뷰입니다. 영역은 양식 자체의 일부이기도합니다.

답변

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 
    } 
    }); 
}); 

을의 LocationsController # 쇼 :

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

대략 있다고이 일할 수있는 방법에 대해 설명합니다. 내가 만든 컨트롤러/모델 이름을 대체하십시오.

+0

감사합니다. 문제를 해결하기 위해 올바른 방향으로 나를 차버렸습니다. 나는 RJS를 렌더링하는 동작을함으로써 과도하게 노력했지만, 자바 스크립트를 처리하는 것은 더욱 어려워진다 :) – u2622

+0

아무런 문제없이 도움이 될 수있어서 기뻤다. –

관련 문제