2

更新されたソリューション:

受け入れられた回答から少し変更しました(これにより、正しい軌道に乗ったので、新しいものを提出していません):

<table class="fixed">                                                                            
  <tr>                                                                             
    <th>Student Name</th>
    <!-- create as many <th> as there are evaluations -->
    <% @eval_count.times do |i|  %>                                                 
      <th>Evaluation <%= i+1 %></th>
    <% end %>    
    <th>Student Average <br />(for this goal)</th>

  </tr>                                                                           

  <% for eval in @evals %>                     
    <tr class="<%= cycle("odd", "even", name: "evals")%>">
        <!-- eval returns { s_id [eval],[eval]} -->
      <td><%= eval[1].first.student.name%></td> 
      <!-- in each student's row, print the score for each consecutive evaluation -->
      <% @eval_count.times do |i|  %>                                                 
        <td><%= eval[1][i].score %></td> 
      <% end %>
    </tr>             
   <% reset_cycle("evals") %>   
   <% end %>                                                                        
</table>

更新を終了する

現時点では、次のように表示されています (見苦しいことはわかっています。これだけを行っているため、テスト中にすべてが同じページに表示されます。動作したらクリーンアップします!):

<div class="holder2 round">
  <% if @goal.avg.nan? %>
    <p>
      This goal has not been evaluated yet!
    </p>
  <% else %>    
    <%= render 'evaluations_by_goal' %>         
  <% end %> 
</div>

_evaluations_by_goal.html.erb:

<% ordered_evals_by_goal = @goal.evaluations.order("eval_number").all.group_by { |g| g.eval_number } %>

<h3>
The overall average for this goal is <%= @goal.avg %>
</h3>
<table>
  <tr>
    <th>Student Name</th>
    <th>Evaluation 1</th>
    <th>Evaluation 2</th>
  </tr>
  <% @scores = [] %>
  <% ordered_evals_by_goal.each do |number, evals| %>
    <% evals.in_groups(evals.count, false) do |group| %>
      <% group.each do |eval| %>
        <tr>
          <td><%= eval.student.name %></td>
          <td><%= eval.score %></td>
          <td>**others here**</td>
        </tr>
      <% end %>
    <% end %>   
  <% end %> 
</table>

編集:

ハッシュの構造を見ることができるように、これをordered_evals_by_goal出力します:

{22=>
  [#<Evaluation id: 1702, score: 4, created_at: "2013-08-25 11:00:58", updated_at: "2013-08-25 11:00:58", student_id: 22, goal_id: 28, eval_number: 22>, 
  #<Evaluation id: 1710, score: 3, created_at: "2013-08-25 11:01:08", updated_at: "2013-08-25 11:01:08", student_id: 23, goal_id: 28, eval_number: 22>, 
  #<Evaluation id: 1718, score: 3, created_at: "2013-08-25 11:01:15", updated_at: "2013-08-25 11:01:15", student_id: 24, goal_id: 28, eval_number: 22>, 
  #<Evaluation id: 1726, score: 3, created_at: "2013-08-25 11:01:21", updated_at: "2013-08-25 11:01:21", student_id: 25, goal_id: 28, eval_number: 22>], 
23=>
  [#<Evaluation id: 1734, score: 3, created_at: "2013-08-25 11:02:18", updated_at: "2013-08-25 11:02:18", student_id: 22, goal_id: 28, eval_number: 23>, 
  #<Evaluation id: 1742, score: 3, created_at: "2013-08-25 11:02:27", updated_at: "2013-08-25 11:02:27", student_id: 23, goal_id: 28, eval_number: 23>, 
  #<Evaluation id: 1750, score: 3, created_at: "2013-08-25 11:02:35", updated_at: "2013-08-25 11:02:35", student_id: 24, goal_id: 28, eval_number: 23>, 
  #<Evaluation id: 1758, score: 3, created_at: "2013-08-25 11:02:42", updated_at: "2013-08-25 11:02:42", student_id: 25, goal_id: 28, eval_number: 23>]}

編集を終了

現時点では、これを出力します:

ここに画像の説明を入力

しかし、学生の名前がループし始める場所では、スコア データを空の td に入れて、テーブル全体が (この場合) 5 行 (テーブル ヘッダーの 1 つとテーブル データの 4 つ) になるようにします。これどうやってするの?

4

1 に答える 1

1

必要な出力を得るために、ビュー コードを次のようにリファクタリングできます。

<% evals_by_student = @goal.evaluations.order("eval_number").group_by(&:student_id) %>

<h3>The overall average for this goal is <%= @goal.avg %></h3>

<table>                                                                            
  <tr>                                                                             
    <th>Student Name</th>                                                          
    <th>Evaluation 1</th>                                                          
    <th>Evaluation 2</th>                                                          
  </tr>                                                                           

  <% for student_id, (eval_1, eval_2) in evals_by_student %>                       
    <tr>                                                                           
      <td><%= eval_1.name %></td>                                                  
      <td><%= eval_1.score %></td>                                                 
      <td><%= eval_2.score if eval_2.present? %></td>                              
    </tr>                                                                          
  <% end %>                                                                        
</table>

ただし、読み込みコード (最初の行) をコントローラー全体でモデルまたは他のドメイン オブジェクトに移動する必要があります。しかし、それは別のトピックなので、質問にそのまま残しました。

于 2013-08-25T15:55:08.027 に答える