属性一行,嵌套在下面(如何在表中显示正确的关系?)

这是我在开始Ruby on Rails旅程的过去几个月中遇到的最困难的问题。

似乎很多人都会面对它,但我在网上找不到解决这个问题的任何东西,这意味着我的问题要么是非常容易让我思考得太厉害,要么我提出错误的问题。 请帮助我找到正确的答案和/或正确的问题!

当用户提交表单时,它包含属性(已量化)和嵌套属性(结果)。 当用户点击索引时,我希望他看到量化在标题行中创建了一个新列(对于每个新的量化实例,它在页面上水平向右)。 然后,对于他提交或稍后添加的每个结果,我希望他看到结果在该列中创建一个新行(沿着页面垂直向下)。

我希望我解释得那么好,并没有让它听起来比它更令人困惑。

这是我可以使用html标签看起来像表格的一种变体:

在此处输入图像描述

这是另一种变化:

在此处输入图像描述

但无论出于何种原因,我无法得到这个,这就是我想要的:

在此处输入图像描述

我真的不知道在这一点上,因为我已经尝试了所有的东西,你需要什么代码来帮助我,所以不要把它全部放在这里我会通过github给你这里: https : //github.com/RallyWithGalli/ ruletoday

UPDATE

使用下面的Patrick的答案,我能够让表格看起来像这样:

在此处输入图像描述

但它的问题是,如果用户添加另一个量化,例如meditate(min)并包含更多结果行然后在它之前的行,那么结果将向左移动,直到它到达具有那么多行或更多行的另一列。 在上面的例子中,“2.1”应该在冥想列中,而是落入重量列。

更新2.0

随着Patrick的更新,这就是现在的样子:

在此处输入图像描述

再次感谢Patrick尝试。 到目前为止,你是那个坚持我的男人。 你提到了bootstrap。 我再说一遍。

在此先感谢您的帮助! 我会永远欠你的债。

这很棘手,因为数据是列式的,但我们需要逐行。 我不是100%确定我理解量化数据是如何布局的,但解决方案的要点是,您需要两个单独的循环,因为标题

和data

位于

不同部分。 让我们重新计算表格的平均值:

 

AVERAGE

<% averaged_data_rows = {} %> <%# averaged_data_rows should end up as: { 0 => [result, result, result], 1 => [result, result, result], etc. } %> <% @averaged_quantifieds.each do |averaged| %> <% if averaged.user == current_user %> <% averaged.results.each_index do |idx| averaged_data_rows[idx] ||= [] averaged_data_rows[idx] << averaged.results.to_a[idx] end %> <% end %> <% end %> <% averaged_data_rows.values.each do |row| %> <% row.each do |result| %> <% end %> <% end %>
<%= averaged.name %> (<%= averaged.metric %>)
<%= result.date_value.strftime("%m-%Y") %>   <%= result.result_value %>

UPDATE

我以前很怕那个。 另一种可能性是逐列保留数据并浮动无序列表。 使用像Bootstrap这样的网格框架会非常有用。 但这里有一个快速而且非常脏的想法可以起作用(假设你不在乎重量(磅)列没有02-2015值,所以它的03-2015价值正在紧挨着另一个02-2015值):

 

AVERAGE

<% @averaged_quantifieds.each do |averaged| %> <% if averaged.user == current_user %> <%# Inline CSS like this is generally frowned upon. I am using it here for demonstration purposes only. The best solution would be to use Bootstrap or something like it to get the side-by-side view on wide screens and top-to-bottom view on smaller screens. But I think that is outside the context of this particular question. %>

<%= averaged.name %> (<%= averaged.metric %>)

    <% averaged.results.each do |result| %>
  • <%= result.date_value.strftime("%m-%Y") %>   <%= result.result_value %>
  • <% end %>
<% end %> <% end %>