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 Rails将每个值的集合转换为数组类型_Ruby On Rails_Arrays - Fatal编程技术网

Ruby on rails Rails将每个值的集合转换为数组类型

Ruby on rails Rails将每个值的集合转换为数组类型,ruby-on-rails,arrays,Ruby On Rails,Arrays,我正在使用.each方法查找流派列表 <% @mg_relationships.each do |mg_relationship| %> <% @genre = Genre.find(mg_relationship.genre_id) %> <%= @genre.id %> <% end %> 我需要能够做的是,在每次调用之外,将上述输出转换为类似数组的格式,例如称为@array,如下所示: [35, 14, 10595,

我正在使用.each方法查找流派列表

<% @mg_relationships.each do |mg_relationship| %>
    <% @genre = Genre.find(mg_relationship.genre_id) %>
       <%= @genre.id %>
<% end %>
我需要能够做的是,在每次调用之外,将上述输出转换为类似数组的格式,例如称为
@array
,如下所示:

[35, 14, 10595, 10751, 35, 28, 12, 14, 878, 35]
这样我就可以用它来过滤相似的值并返回

[35, 14, 10595, 10751, 28, 12, 878]
试试这个:

<%= Genre.where(id: @mg_relationships.pluck(&:genre_id)).map(&:id) %>

您不需要查询
流派
模型,您已经拥有
流派id
。只需在模型或关联上使用:

MgRelationship.pluck(:genre_id)
如果需要结果唯一,可以将
.uniq
应用于作用域以生成
选择不同的

MgRelationship.uniq.pluck(:genre_id)

Meagar的回答很好,但我想提供另一种方式

Genre.where('exists (select 1 from Mg_Relationships 
             where Mg_Relationships.genre_id = genres.id)').pluck(:id)
它具有与
MgRelationship.uniq.pulk(:genre\u id)
相同的效果,但是当MgRelationships数据包含某些genres.id在genres中不存在时,您可以同时将其删除

编辑:

我回顾了你的问题,意识到我们可能都误解了你

您说过您希望在每次调用之外获得@arrary
。我想您只需要获取一次DBMS,将两种内容填充到视图中

如果我想是这样,试试这个:

<% genre_ids = []%>
<% @mg_relationships.each do |mg_relationship| %>
    <% @genre = Genre.find(mg_relationship.genre_id) %>
       <%#= @genre.id %>
       <% genre_ids << @genre.id  %>
<% end %>

<% = genre_ids %>
<% = genre_ids.uniq %>


上面的一些答案就可以了,但由于您已经有了
@mg_relationships
变量,您想要什么呢


@mg|u relationships.map{mg|mg.genre|u id}.uniq

是否存在mg_关系所属的关系:类型?如果您已经拥有类型id,那么为什么要查找类型以获取类型id?我更新了我的答案,希望有帮助。您可以发布
@mg_关系的输出。检查
此返回
35 14 10595 10751[35,14,10595,10751]35[35]28 12 14 878[28,12,14,878]35[35]
我还在试图从我的未回答的问题中找到一个解决方案,更多细节在这里@mg_关系的内容是什么?电影id和流派id,将电影连接到流派,反之亦然……这就是制作
[35,14,10595,10751,28,12,878]所需的全部代码
。这会返回最初未请求的其他值,然后您需要向我们提供有关
@mg\u关系的更多信息。这只会返回一组不同的值。非常感谢您的回答和时间,您提供的代码似乎只是“镜像”了上面的代码        35 14 10595 10751 [35, 14, 10595, 10751] 35 [35] 28 12 14 878 [28, 12, 14, 878] 35 [35]我想这可能是因为每个函数都包含Mg。每个函数,我想也许用代码问一个新问题就可以解决它,但似乎不是这样。如果你看一下,这是这个问题的一个扩展版本,但答案可以归结为sameI试图在一个新问题中简化它,如前所述上面提到的一个没有收到任何答案,如果你有任何想法,上面有一个悬赏,这将是非常值得赞赏的。这没有显示任何东西。如果我去掉uniq!并把代码放在each之外,它只显示[35]。如果我把它放在each中,没有uniq!,它显示35[35,14,10595,10751]14[35,14,10595,10751]10595[35,14,1059510751]10751[35,14,1059510751]35[35]28[28,12,14,878]12[28,12,14,878]14[28,12,14,878]878[28,12,14,878]35[35]hmmm它不需要在内部。每个变量都应该在外部对变量本身进行操作
<% genre_ids = []%>
<% @mg_relationships.each do |mg_relationship| %>
    <% @genre = Genre.find(mg_relationship.genre_id) %>
       <%#= @genre.id %>
       <% genre_ids << @genre.id  %>
<% end %>

<% = genre_ids %>
<% = genre_ids.uniq %>