0

申请的这一部分与 RFP 投标的分级过程有关。

基本上一个类别(例如:成本、公司简介等等)
有许多 TestCriteria。(例如:价格比较,每日价格的竞争力......)

一个TestCriterium 可以有三个GradingScores {失败、满足和超过}(带有#s 和descr)

将它们连接在一起,Grade 与我们分配 GradingScale 的 TestCriteria 相关联。
我想“继承”拥有的类别。


在进入一个新的年级时,我已经存储了 category_id,可以说是它的第二个祖父母。

在返回 EDIT 时的成绩表中,

我需要一个类别下拉列表,选择的默认值为@grade.category_id 这有两个级别。
简单案例如下图所示,再看下图。


我最近的尝试包括:

在年级的控制器中

  @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 ) %>

我还尝试了一个简单的 Category.find() w/_form 中的参数。
如果我能在这方面得到帮助,我可以在其他事情上大有帮助。

== 现在是棘手的版本 ==

这都是我真正需要的初步准备。

我正在使用 jQuery ajax 脚本来执行 Category & TestCriterium & Grade 的初始 NEW 条目。

类别限制了适当的测试列表,
而测试限制了等级选项的适当列表。

这是我用来获取这一系列字段的成绩表格:

<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 的顶部)
你如何建议我如果/那么我的方式来使这个在 EDIT 上工作而不是在 NEW 上工作?

谢谢!

4

1 回答 1

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选项。

于 2013-03-14T01:05:45.390 回答