0

アプリケーションのこの部分は、RFPの入札の評価プロセスと関係があります。

基本的に、カテゴリ(例:コスト、会社概要など)
には多くのTestCriteriaがあります。(例:価格比較、日次レートの競争力...)

TestCriteriumは、3つのGradingScores {fail、meet、exceed}(#sとdescrを使用)を持つことができます

すべてを接続すると、GradeはGradingScaleを割り当てるTestCriteriaに関連付けられます。
所有しているカテゴリーを「繰り越し」たいのですが。


新しいグレードに入ると、いわば2番目の祖父母であるcategory_idを保存しました。

EDITに戻ったときの成績の_formで、

選択したデフォルトが@grade.category_idであるCategoryドロップダウンが必要です。これには2つのレベルがあります。
ここに示すような単純なケース、そして以下を参照してください。


私の最近の試みは次のとおりです。

グレードのコントローラーで

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

また、_formにパラメーターを含む単純なCategory.find()を試しました。
私がこれで助けを得ることができれば、私は他の事柄で長い道のりを行くことができます。

==今トリッキーなバージョン==

これはすべて、私が本当に必要としているものの予備的なものです。

私はjQueryajaxスクリプトを使用して、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>

そして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 

いくつかの切り取りと貼り付けを行いましたが、上記のコードは機能します。

ドロップダウンの単純なプリロードを実行する方法を学習した後(このQの上部)
、EDITでこれを機能させる方法とNEWで機能する方法をどのように提案しますか?

ありがとう!

4

1 に答える 1

2

オプションのリストの html 文字列を作成する を使用しselectないでください。あなたのためにそれを行います。それをに変更してみてくださいoptions_from_collection_for_selectselectcollection_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 に答える