我正在尝试显示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>
这不起作用。请告诉我
答案 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>