2011-03-15 3 views
5

레일즈 애플리케이션에서 작업하고 있지만 종속 드롭 다운 목록을 처리하는 방법을 찾을 수 없습니다. 나는 3 개 모델을 가지고 : - 회원 카테고리를 선택하면레일 종속 형식의 collection_select 필드

, 내가 다운 목록 두 번째 드롭을 채우기 위해이 범주 내에서 그룹을 싶습니다 (- 여러 회원 을 가지고 그룹 - 여러 그룹에게 을 가지고 범주 그룹과 회원간에 동일한 것).

나는 다음과 같은 형태가

<div class="field"> 
<%= f.collection_select(:category, Category.find(:all), :id, :name, {:include_blank => 'Category'}) %> 
</div> 
<div class="field"> 
<%= f.collection_select(:group, Group.find(:all), :id, :name, {:include_blank => 'Group'}) %> 
</div> 
<div class="field"> 
<%= f.collection_select(:member, Member.find(:all), :id, :name, {:include_blank => 'Member'}) %> 
</div> 
<div class="actions"> 
<%= f.submit %> 
</div> 

그을 할 수있는 가장 좋은 방법이 될 것입니다 무엇 ... (분명이 내가 특정 모델에 대한 모든 항목을 나는 원하는 방법을 작동하지 않습니다)가 분야에 따라 다릅니 까? 나는 웹상에서 이것에 관한 몇 가지 주제를 발견했지만 정말로 답을 찾을 수 없었다.

답변

4

가장 좋은 방법은 AJAX 호출입니다. 시작 부분에 카테고리 생성 드롭 다운 메뉴가 있습니다. 그리고 카테고리 변경에 따라 아약스 콜을 만들고 그룹을 채 웁니다. 그리고 그룹 드롭 다운 변경 회원에 대해서도 동일하게하십시오. 이 같은

시도 뭔가 : 컨트롤러에서

$("#category']").click(function(){ 
    var url = '/get_drop_down_options?category_id=' + $(this).val() 
    $("#group").removeOption(/./) 
    $.get(url, function(data) { 
    $('#group').addOption(data, false); 
    }); 
}); 

:

def get_drop_down_options 
    val = params[:category_id] 
    #Use val to find records 
    options = YourModel.collect{|x| "'#{x.id}' : '#{x.label}'"}  
    render :text => "{#{options.join(",")}}" 
end 

이제 부분 필요 없어요.

+0

감사합니다. jquery를 추천 해 주시겠습니까? – Luc

+0

예. jQuery가 요구 사항에 가장 적합합니다 – Ashish

+0

hmmm ... JQuery를 사용할 때 여전히 이상한 점이 있습니다. $ .getJSON은 { '1': 'first', '2': 'second'}와 같은 내용을 검색하지만이 JSON 사람은 잘못된 JSON으로 표시됩니다. – Luc

0

각 필드마다 다른 ID를 사용하고 일부 jquery 애니메이션 및 아약스 마법을 사용합니다. 필드를 클릭하면 하위 그룹의 모든 레코드를 검색하기 위해 아약스 호출을 수행합니다. 해당 div가 애니메이션 또는 유사한 슬라이드 아래에 표시됩니다.