Rails 4 - 显示1周,2周和3周前的数据

时间:2015-03-13 22:40:19

标签: ruby-on-rails ruby-on-rails-4

我正在尝试显示3个数据统计信息(统计信息),这些数据统计信息已在1,2和3周前正好添加到各个用户。 stat属于用户,具有三个属性:user_id,usage,date_added

用户模型

def added_1_week_ago
  self.stats.where(date_added: 1.week.ago)
end

def added_2_week_ago
  self.stats.where(date_added: 2.week.ago)
end

def added_3_week_ago
  self.stats.where(date_added: 3.week.ago)
end

控制器

@users = User.all

查看

<table>
  <% @user.each do |u| %>
    <tr>
      <td><%= u.name %></td>   
      <td><%= u.stat.added_1_week_ago.usage %></td>   
      <td><%= u.stat.added_2_week_ago.usage %></td>   
      <td><%= u.stat.added_3_week_ago.usage %></td>   
    </tr>
  <% end  %>
</table>

这不起作用。请告诉我

3 个答案:

答案 0 :(得分:1)

这不是我写这种代码的方式;但要回答你的问题 - 大概是如果一个用户有一个统计数据(我假设是这种情况,因为你为每个用户输出1个表行,尽管模型关联中有一对多的关系),然后尝试:

def added_1_week_ago
  self.stats.where(date_added: 1.week.ago).first
end

def added_2_week_ago
  self.stats.where(date_added: 2.week.ago).first
end

def added_3_week_ago
  self.stats.where(date_added: 3.week.ago).first
end

   <table>
      <% @user.each do |u| %>
        <tr>
          <td><%= u.name %></td>   
          <td><%= u.added_1_week_ago.usage %></td>   
          <td><%= u.added_2_week_ago.usage %></td>   
          <td><%= u.added_3_week_ago.usage %></td>   
        </tr>
      <% end  %>
    </table>

答案 1 :(得分:1)

@ user1322092是正确的,除了因为user.stats是一个数组(用户有很多统计数据),我认为你需要遍历stats数组(即使它是一个数组1):

<table>
  <% @user.each do |u| %>
    <tr>
      <% (u.added_1_week_ago + u.added_2_week_ago + u.added_3_week_ago).each do |stat| %>
      <td><%= stat.usage %></td>
    </tr>
  <% end %>
</table>

但是,如果您每周只有一个,或者您只想每周抓取第一个实例,则只需更改您的模型(在这种情况下我不相信self) :

def added_1_week_ago
  stats.where(date_added: 1.week.ago).first
end

def added_2_week_ago
  stats.where(date_added: 2.week.ago).first
end

def added_3_week_ago
  stats.where(date_added: 3.week.ago).first
end

然后你可以使用@ user1322092的建议:

<table>
  <% @user.each do |u| %>
    <tr>
      <td><%= u.name %></td>   
      <td><%= u.added_1_week_ago.usage %></td>   
      <td><%= u.added_2_week_ago.usage %></td>   
      <td><%= u.added_3_week_ago.usage %></td>   
    </tr>
  <% end  %>
</table>

答案 2 :(得分:0)

感谢所有其他答案和帮助。

由于我决定使用前14周(今天有15周,包括本周,今天),我简化了模型,使用了几周前的变量和视图中的循环。

这是我最终做的事情。

<强>更新

用户模型

def stats_weeks_ago(number_of_weeks)
 self.stats.where(date: number_of_weeks.week.ago.strftime("%Y-%m-%d"))
end

统计信息索引视图

<table>
  <% @users.each do |u| %>
    <tr>
      <td><%= u.name %></td>
      <% 14.downto(0).each do |i| %>
        <td><% u.stats_weeks_ago(i).each do |stats| %> <%= stats.usage %> <% end %></td>
      <% end %>
    </tr>       
  <% end %>
</table>