Ruby on rails Rails多变量

Ruby on rails Rails多变量,ruby-on-rails,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3.2,我有多个变量,在一个表中排列有问题。我按年份进行分组,但当生成表时,如果其中一列只有一个结果,它会将其放在第一行,而不是相应的年份 这是它正在做的事情的图像。旱地栏应在2006年 看法 我首先检查查询实际返回的内容。你有2004年和2005年旱地的记录吗?似乎不是这样 也许你能做到 a永远不是零,否则a.year会崩溃,所以不需要a.nil? 对于其他值b、c、d,您可以检查!b、 零?而b.year==a.year。。。 这应该只打印相应年份行中的值 <% @all.zip(@irrig

我有多个变量,在一个表中排列有问题。我按年份进行分组,但当生成表时,如果其中一列只有一个结果,它会将其放在第一行,而不是相应的年份

这是它正在做的事情的图像。旱地栏应在2006年

看法


我首先检查查询实际返回的内容。你有2004年和2005年旱地的记录吗?似乎不是这样

也许你能做到

a永远不是零,否则a.year会崩溃,所以不需要a.nil? 对于其他值b、c、d,您可以检查!b、 零?而b.year==a.year。。。 这应该只打印相应年份行中的值

<% @all.zip(@irrigated, @semi, @dryland) do |a, b, c, d| %>
 <tr>
  <td><%= a.year %></td>
  <td><% if a.nil? %>0<% else %><%= a.trial_id %><% end %></td>
  <td><% if a.nil? %>0<% else %><%= "%.2f" % (a.lint/227) %><% end %></td>
  <td><% if b.nil? %>0<% else %><%= b.trial_id %><% end %></td>
  <td><% if b.nil? %>0<% else %><%= "%.2f" % (b.lint/227) %><% end %></td>
  <td><% if c.nil? %>0<% else %><%= c.trial_id %><% end %></td>
  <td><% if c.nil? %>0<% else %><%= "%.2f" % (c.lint/227) %><% end %></td>
  <td><% if d.nil? %>0<% else %><%= d.trial_id %><% end %></td>
  <td><% if d.nil? %>0<% else %><%= "%.2f" % (d.lint/227) %><% end %></td>
  </tr>
<% end %>
@variety = Variety.where(variety_id: params[:variety_select]).group('variety_name')

@all = Result.where(variety_id: params[:variety_select]).group('results.year').where('results.lint > 0').select('AVG(results.lint) AS lint, results.year as year, COUNT(results.trial_id) AS trial_id').joins(:trial)

@irrigated = Result.where(variety_id: params[:variety_select]).group('results.year').where('results.lint > 0').select('AVG(results.lint) AS lint, results.year as year, COUNT(results.trial_id) AS trial_id').joins(:trial).where('trials.irrigated = ?', '1')

@dryland = Result.where(variety_id: params[:variety_select]).group('results.year').where('results.lint > 0').select('AVG(results.lint) AS lint, results.year as year, COUNT(results.trial_id) AS trial_id').joins(:trial).where('trials.irrigated = ?', '0')

@semi = Result.where(variety_id: params[:variety_select]).group('results.year').where('results.lint > 0').select('AVG(results.lint) AS lint, results.year as year, COUNT(results.trial_id) AS trial_id').joins(:trial).where('trials.irrigated = ?', '2')