Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby on Rails上的级联关系模型_Ruby On Rails_Ruby_Activerecord_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails Ruby on Rails上的级联关系模型

Ruby on rails Ruby on Rails上的级联关系模型,ruby-on-rails,ruby,activerecord,ruby-on-rails-4,Ruby On Rails,Ruby,Activerecord,Ruby On Rails 4,我有三种型号 用户有很多:文章 文章有很多:每日查看量和属于:用户 DailyViewMetric属于:文章 我希望每个用户都能对其文章的指标进行概述。此时,我在用户控制器的show操作中传递@user=user.find(params[:id]),以打开特定用户的显示页面。我还传入@articles=Article.where(user_id:params[:id])。加载,以便将可用文章限制为仅包含用户的文章 由于DailyViewMetric模型多次(在不同的日子)出现同一篇文章,因此我需

我有三种型号

用户
有很多:文章

文章
有很多:每日查看量
属于:用户

DailyViewMetric
属于:文章

我希望每个用户都能对其文章的指标进行概述。此时,我在用户控制器的
show
操作中传递
@user=user.find(params[:id])
,以打开特定用户的显示页面。我还传入
@articles=Article.where(user_id:params[:id])。加载
,以便将可用文章限制为仅包含用户的文章

由于
DailyViewMetric
模型多次(在不同的日子)出现同一篇文章,因此我需要将它们聚合到一个新的数组中。也就是说,我需要

article_id  date   views
1           feb-01  20
1           feb-02  50
2           feb-01  30
以[[1,70]、[2,30]]的形式返回,以便我可以根据用户的意愿对其进行排序。我该怎么做?是否在
DailyViewMetric
模型中创建命名范围?或者在
user\u helper.rb


如果我可以运行
newArray.each do | a |
在我的视图中创建一个包含
等内容的表格,那就太好了。。有了一些东西,我可以在用户id中传递,因此聚合仅限于他/她的文章

您应该能够通过以下方式进行

长格式:

视图\u数组=[]

@articles.each do |a|
 a.views do |v|
  views_array << [a.id, v.date, v.count]
 end
end

这实际上并没有把它加起来。我仍然得到这样的2d数组
[1,feb-01,20],[1,feb-02,50],[2,…]]
这不是你需要的吗?你能粘贴你得到的结果吗。(据我所知,它应该是一个数组数组)是的,它应该是一个数组数组,但是聚合,即查看
id
,将所有视图添加到一起,并给出数组的一个元素,即[id,date,sum of of of view]。我需要它来正确排序表格,因为当前如果我按视图排序,它会按一天中具有最高视图的文章排序,而不是按最高总视图数排序。基本上,我想在数据集上运行
mapreduce
,你是指计数总和吗?我认为日常视图指标包含在其中。如果daily view metric在一个日期中有许多行,则可以使用reduce[1,2,3].reduce(:+)。这将基本上给你计数。因此,在这种情况下,您需要获得一个计数数组,并对其应用reduce。
@articles.collect {|a| a.daily_view_metrics.collect {|dv| [a.id, dv.date, dv.count] } }