2013-03-14 2 views
0

Эта часть приложения связана с процессом оценки для ставок для RFP.Rails: form's f.select не возвращает grand-owned_to w/default

В основном категория (например, стоимость, профиль компании, - и многие другие)
имеет много TestCriteria. (Например: Сравнение цен, конкурентоспособность Daily Rate ...)

TestCriterium может иметь три GradingScores {терпят неудачу, отвечают, и превосходящие} (с #s и Descr)

Подключение все это вместе, Сорт связан с TestCriteria, которому мы назначаем GradingScale.
Я бы хотел «перенести» принадлежащую им категорию.

При входе в новый класс я сохранил category_id, его второй дед и бабушку, если можно так выразиться.

В _form Grade по возвращению в ПРАВКА,

мне нужно Категория ниспадающего меню с выбранным по умолчанию является @ grade.category_id Есть два уровня этого.
Простой корпус, как показано здесь, а затем см. Ниже.


Моя последняя попытка включала:

В контроллере Grade в

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

и _form

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

Я также попытался простой категорию. найти() w/параметры в _form.
Если я смогу получить помощь в этом, я могу пойти длинными способами в других вопросах.

== ТЕПЕРЬ НЕОЧЕВИДНЫЙ версия ==

Это все предварительные за то, что мне действительно нужно.

Я использую сценарий jQuery ajax, чтобы сделать начальную новую запись категории & TestCriterium & Оценка.

Категория ограничивает соответствующий список тестов,
и Test ограничивает соответствующий список параметров класса.

Вот форма для классов, которые я использую, чтобы получить эту серию полей:

<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> 

И Аякс:

$ -> 
$('#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 

Я сделал некоторую резку и склейку, но выше код работает.

После того как я узнать, как сделать простую предварительную нагрузку раскрывающегося списка, (верхняя часть этого Q)
как ты предлагаешь IF/THEN мой путь, чтобы сделать эту работу на EDIT против того, что работает здесь для NEW?

Спасибо!

ответ

2

Вы используете select, поэтому не следует использовать options_from_collection_for_select, который создает строку html для списка параметров. select делает это для вас. попробуйте изменить что collection_select

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

если f.object равно @grade, вам не нужно передать параметр selected.

 Смежные вопросы

  • Нет связанных вопросов^_^