2013-03-14 2 views
0

신청서의이 부분은 RFP 입찰가에 대한 입찰 프로세스와 관련이 있습니다.레일 : 양식의 f.select 반환하지 않음 grand-belong_to w/default

기본적으로 카테고리 (예 : 비용, 회사 프로필 및 기타 여러 항목)
에는 많은 TestCriteria가 있습니다. (예 : 가격 비교, 일일 요금 ... 경쟁력) TestCriterium이

(#S 및 DESCR에) 세 GradingScores {실패 충족하고 초과}을 가질 수

A는 학년, 모두 함께 연결 GradingScale을 할당 한 TestCriteria와 연결되어 있습니다.
소유 카테고리를 '계속 전진시키고 싶습니다.' 내가 CATEGORY_ID를 저장 한 새로운 학년을 입력에


, 그 2 조부모는 말하자면.

편집 할 복귀에 대한 등급의 _form에서

,

나는이 두 가지 수준이있다 선택한 기본 @ grade.category_id 인과 범주 드롭 다운을해야합니다.
여기에 표시된 간단한 사례와 아래를 참조하십시오.


내 가장 최근의 시도

포함 : 등급의 컨트롤러

@categories = Category.where(:id => @grade.category_id) 

에서

<% f.select :category_id, options_from_collection_for_select(@categories.sort_by 
{ |cats| cats.category_name}, "id", "category_name", 
:selected => @grade.category_id) %> 

_form에 나는 또한 간단한 분류를 시도했습니다. 찾기() _form의 매개 변수가 있습니다.
이 문제에 대한 도움을받을 수 있다면 다른 문제에서 긴 길을 갈 수 있습니다.

== 이제 까다로운 버전 ==

이 정말 필요한 모든 사전이다.

나는 카테고리 & TestCriterium & 등급의 초기 신규 입력을 수행하기 위해 jQuery ajax 스크립트를 사용하고 있습니다.

카테고리는 적절한 테스트 목록을 제한하며
이며 테스트는 적합한 옵션 등급 목록을 제한합니다. 나는 약간의 절단 및 붙여 넣기하지만 위를했던

$ -> 
$('#grade_picker_div #category_category_id').change -> 
#selected = $(this).attr 'value' 
selected = $(':selected', this)[0].value 
$.ajax '/categories/' + selected, 
    type: 'get' 
    dataType: 'json' 
    error: (jqXHR, textStatus, errorThrown) -> 
    alert 'stop' + textStatus 
    success: (data, textStatus, errorThrown) -> 
    select_html = '<br><b>Test Criteria</b><br/> <select id="grade_test_criterium_id" name="grade[test_criterium_id]"><option></option>' 
    for test_criterium in data.test_criteria 
     select_html += '<option value="' + test_criterium.id + '">' + test_criterium.criteria + '</option>' 
    select_html += '</select>' 
    $('#grade_picker_div #test_criteria_div').html(select_html) 
    $('#grade_picker_div #grading_scales_div').html('') 
return false 

$(document).on 'change', '#grade_picker_div #test_criteria_div', -> 
selected = $(':selected', this)[0].value 
#alert selected 
$.ajax '/test_criteria/' + selected, 
    type: 'get' 
    dataType: 'json' 
    error: (jqXHR, textStatus, errorThrown) -> 
    #alert 'stop' textStatus 
    success: (data, textStatus, errorThrown) -> 
    select_html = '<b>Grade</b><br/> <select id="grade_grading_scale_id" name="grade[grading_scale_id]"><option></option>' 
    for grading_scale in data.grading_scales 
     select_html += '<option value="' + grading_scale.id + '">' + grading_scale.name + " : " + grading_scale.description + '</option>' 
    select_html += '</select>' 
    $('#grade_picker_div #grading_scales_div').html(select_html) 
return false 

:

<div class="field"> 
<%= label_tag 'Evaluation Category' %><br/> 
    <div id="grade_picker_div" > 
     <%= collection_select(:category, :category_id, Category.find(:all, :order => "id"), 
       :id, :category_name,{:include_blank => true}) %><br/> 
     <div id="tests_div"></div><br/> 
     <div id="grades_div"></div><br/> 
     </div> 
</div> 

그리고 아약스 : 여기

내가 필드의이 시리즈를 얻기 위해 사용하고 등급에 대한 양식입니다 코드가 작동합니다.내가/THEN 내 방식이 대 편집에이 작업을하는 경우 드롭 다운의 간단한 프리로드 (이 Q의 상단 부분)
어떻게 당신은 내가 제안 할을 수행하는 방법을 학습 한 후

무엇 NEW의 경우 여기에서 작동합니까?

감사합니다!

답변

2

select을 사용하고 있으므로 options_from_collection_for_select을 사용하면 옵션 목록에 html 문자열을 생성해서는 안됩니다. select이 해당 작업을 수행합니다. f.object@grade 같다 collection_select

<%= f.collection_select :category_id, @categories.sort_by(&:category_name), :id, :category_name, { selected: @grade.category_id } %> 

경우에 그 변경하려고하면 selected 옵션을 통과 할 필요가 없습니다.