Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.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 - Fatal编程技术网

Ruby on rails 如何按数组中的单个元素分组

Ruby on rails 如何按数组中的单个元素分组,ruby-on-rails,ruby,Ruby On Rails,Ruby,我收集了一些节目,并附上了它们的类型,因此Show.first.genres返回[“恐怖”、“科幻”等] 我的目标是通过独特的风格来计算用户的平均分数。问题是,如果我做一个Show.group(:genres),我会得到一整套类型的结果: ['horror','scifi']=>[list of entries] ['horror','gore']=>[list of entries] 我更愿意数一数电影类型中所有恐怖元素,所有科幻元素,等等。有什么想法吗 以下是一些相关的模式信息

我收集了一些节目,并附上了它们的类型,因此
Show.first.genres
返回
[“恐怖”、“科幻”等]

我的目标是通过独特的风格来计算用户的平均分数。问题是,如果我做一个
Show.group(:genres)
,我会得到一整套类型的结果:

['horror','scifi']=>[list of entries]
['horror','gore']=>[list of entries]
我更愿意数一数电影类型中所有恐怖元素,所有科幻元素,等等。有什么想法吗

以下是一些相关的模式信息:

create_table "animes", force: :cascade do |t|
end

create_table "animes_genres", id: false, force: :cascade do |t|
 t.integer "anime_id", null: false
 t.integer "genre_id", null: false
end

create_table "genres", force: :cascade do |t|
 t.string "name"
end

create_table "library_entries", force: :cascade do |t|
end

这些都是前后链接的,我通常可以通过ActiveRecord访问存在的任何关系。

如果ActiveRecord关联是双向的,那么您应该能够从流派模型的角度来看待问题

Genre.find('space opera').shows

我不确定这是否是您正在寻找的,但如果该
Show.group(:genres)
返回
[genres]=>[array of genres]=>[array of entries]
哈希值,您可以将其转换为
genre=>[array of entries]
哈希值,方法如下:

by_genres = Show.group(:genres)
by_genre = {}
by_genre.default = []
by_genres.each{|ks,vs| ks.each{|k| by_genre[k] += vs }}
或者,如果您只需要计数:

by_genres = Show.group(:genres)
count_genre = {}
count_genre.default = 0
by_genres.each{|ks,vs| ks.each{|k| count_genre[k] += vs.size }}

或者,以一种更具讽刺意味的方式,您可能应该从
类型开始,并执行以下操作:

Genre.all.map{|g| [g, g.shows] }.to_h

风格是如何存储在数据库中的?有一个
genres
表,其中只包含id/名称,然后是一个自动生成的
show\u genres
表,该表链接每个节目及其风格。节目和类型共享一种
has\u和\u属于\u many
关系。感谢您提供更多信息。你能编辑这个问题以包括它,以及回答者需要的任何其他信息吗?因此,希望问题能够独立解决。更新了一些模式信息后,请告诉我是否还有其他有用的信息。您是对每种类型的
节目数量感兴趣,还是对列表本身感兴趣?在紧急情况下,您可以像直接运行SQL一样运行SQL。我不确定这样做是否非常有效。因为在任何时候,我只对用户列出的节目感兴趣,从另一个角度看就像是从一个巨大的漏斗开始。啊,我错过了那部分。因此,实际上您正在寻找一种替代
myUser.shows.group(:genres)
?更像是一种改进。这是可行的,但就像我说的,我希望它由单一流派分开,而不是整个阵列。