Rails在表中按列和组循环

时间:2018-08-21 02:53:54

标签: ruby-on-rails ruby-on-rails-5

我正在寻找一个循环表,每种处理都有3个结果。我想在一行中包含日期,度数,然后列出每个单独的处理方法。

控制器

radio2

模型

@trial = Trial.find(params[:trial_id])
@max_length = [@trial.treatment_selections].map(&:size).max

到目前为止,我有这个:

has_many :treatment_selections, primary_key: 'trial_id'
has_many :assessments, primary_key: 'trial_id'
has_many :methods, through: :assessments

哪个生成此:

enter image description here

但是我希望它产生这个:

enter image description here

2 个答案:

答案 0 :(得分:0)

我想说您的代码中至少存在两个问题:

1_您的一根衬纸似乎不起作用,请在控制台中测试结果以确保它确实是您所期望的。如果没有有关您的模型的更多详细信息,我们将为您提供更多帮助。

<% @trial.methods.order(:treatment_selection_id).order("assessment_date ASC").in_groups_of(3)[data].each_with_index do |e, index| %>

2_如果<td>...</td>之后只有一个<td>...degre...</td>,则无法填充第4(处理2),第5(处理3),第6(处理4)列。

您可能需要像在<th>treatment x</th>

中那样在此处放置一个循环

答案 1 :(得分:0)

我猜您最后一张表中的每一行都是一种评估,每种评估的每一列(处理1至4)都是一种方法。因此,您将需要嵌套循环:

<% @trial.assessments.order("assessment_date ASC").each do |a| %>
  <tr>
    <td></td>
    <td><%= Time.at(a.try(:assessment_date)/1000).strftime("%d/%m/%Y") rescue 0 %></td>
    <td><%= a.try(:degrees) rescue 0 %></td>
    <% a.methods.each do |m| %>
      <td><%= m.try(:total).round(1) rescue 0 %></td>
    <% end %>
  </tr> 
<% end %>