2016-12-03 1 views
1

저는 고객이 Ruby on Rails에서 호텔의 객실을 예약 (예약) 할 수있는 프로젝트를 진행하고 있습니다. 고객이 원하는 룸 유형을 선택하고 그의 선택에 따라이 유형의 객실 목록을 표시하려고합니다.Ruby on Rails collection_select 변경 사항은 다른 양식에 따라 달라집니다.

<div class="form-group"> 
    <div class="control-label col-sm-5"> 
    <%= f.label :room_Type %> </div> 
    <div class="col-sm-6"> 
    <%= f.collection_select :room_type, Type.all, :id, :name, :prompt => true %></div></div> 
    <div class="form-group"> 
    <div class="control-label col-sm-5"> 
    <%= f.label :room_Number %> </div> 
    <div class="col-sm-6"> 
    <%= f.collection_select :room_id, Room.all, :id, :number, :prompt => true %> 
    </div></div> 

이제 데이터베이스에서 객실 유형 목록을 표시 할 수 있습니다. 또한 데이터베이스에서 객실 목록을 보여줄 수도 있습니다. 나는 이것에 대해 몇 가지 조사를했고 그들은 JQuery 나 Ajax를 사용하여 할 수 있다고 말했다. 그러나 나는 그것을 어떻게하는지 모른다. 이걸 좀 도와 줄래?

답변

0

이 솔루션은 흐름을 이해하는 데 도움이 될 수 있습니다. 먼저 컨트롤러로 아약스 호출을 시작합니다. (아약스 호출의이 URL이 경로에 존재해야한다는 것을 명심하십시오.)

$(document).ready(function() { 
    $("#room_type").on('change', function(){ 
    $ajax({ 
     url: "populate_other_list", 
     type: "GET", 
     data: {room_type: $(this).val()}, 
     // Callbacks that will be explained 
    }) 
    }); 

다음으로 컨트롤러 내부에서 작업을 수행하십시오.

def populate_other_list 
    room_type = params[:room_type] 
    @room = Room.find_by room_type: room_type 
or  
    Pass Id from AJax of Type and find the room here from Type  
    @room = Type.find(params[:type_id).rooms // Call the association if exists  
    respond_to do |format| 
    format.json { render json: @room } 
    end 
end 

이렇게하면 ajax 호출의 성공 콜백에서 목록이있는 JSON 객체가 생성됩니다. 따라서 방 번호 선택을 지우고 옵션을 만들고 추가해야합니다. 당신이 볼 수 있듯이

// Ajax call 
success: function(data) { 
    $("#room_id").children().remove(); 
    // Create options and append to the list 
} 
// Rest of Ajax call 

, 내가

쉽게 힌트를 들어 유래 에서 찾을 수 있습니다 자바 스크립트 PLE의 시뮬레이션은 [가되기 때문에 외모

다음과 같은 옵션을 만드는 코드를 삽입하지 않았다
$("#room_id").append("<option>" + /your value/ + "</option>"); 
+0

좋은 설명에 감사드립니다. 나는 다른 질문이있다. 어디서 아약스 호출 (첫 번째 호출)을하고 아약스 호출을 다시 호출해야합니까 (성공 후). get을 사용하여 다른 페이지와 같은 경로에서 URL을 정의한다는 의미입니까? – Adam

+0

네, 경로로 getAs로 정의하고 assets/javascript 디렉토리에 코드를 작성해야합니다. –

+0

그렇지 않으면 미리 정의 된 레일 ajax 형식을 사용할 수도 있습니다 https://kernelgarden.wordpress.com/2014/02/26/dynamic-select-boxes-in-rails-4/ 참조하기 –