Rails .each显示一次重复结果

在rails .each代码中,如何从结果中消除重复?

PMRelationships是一个链接人和电影的关系表MGRelationships是一个链接流派和电影的关系表

我正在寻找的过程是通过第一个PmRelationship然后MgRelationship找到All a Person的类型

  @person.id) %> 
    @movie.id) %>

例如,此代码返回值列表,如下所示:

动作动作喜剧惊悚冒险黑色行动

我怎样才能使它删除两个Lorems而只显示一个Lorems

基本上,摆脱任何重复以返回列表

动作喜剧惊悚冒险黑色

UPDATE

我已经更改了我的简化代码以匹配我的实际应用程序

我知道大部分需要在控制器中,但简化的缘故我首先在视图中这样做

那些可以提到我不需要创建_Relationship表并且可以简单地使用模型has_many_belongs_to等的人注意到,我发现关系表方法更容易处理和控制

感谢和混淆道歉

如您所知,您可以使用associations ,我强烈推荐它。 它将帮助您清理代码并保存数据库查询。

另一件事,你在

    里面缺少

    • 无论如何,根据您当前的代码,您可以在Set填充所有@genre.name

       # as you said in question, following code should be moved to controller genre_names = Set.new <% @pm_relationships = PmRelationship.where(:people_id => @person.id) %> <% @pm_relationships.each do |pm_relationship| %> <% @movie=Movie.find(pm_relationship.movie_id) %> <% @mg_relationships = MgRelationship.where(:movie_id => @movie.id) %> <% @mg_relationships.each do |mg_relationship| %> <% @genre=Genre.find(mg_relationship.genre_id) %> <% genre_names.add(@genre.name) %> <% end %> <% end%> # actual view code 
        <%= "
      • #{genre_names.to_a.join('
      • ')}
      • ".html_safe %>

      您可能希望了解有关Set的更多信息

      注意:将代码移动到相应的文件后,根据需要在控制器和视图中使用适当的变量类型

      尝试替换原始代码:

       <% @mg_relationships.each do |mg_relationship| %> <% @genre=Genre.find(mg_relationship.genre_id) %> <%= @genre.name %> <% end %> 

      要:(这个版本没有破坏你的代码结构,只是改变输出代码的位置)

       <% genre_names = []%> <% @mg_relationships.each do |mg_relationship| %> <% @genre=Genre.find(mg_relationship.genre_id) %> <%#= @genre.name %> <% genre_names |= [@genre.name]%> <% end %> <%= genre_names %> or <%= genre_names.join(" ") %> 

      Array上使用uniq方法,您将能够删除重复项。

      请参阅此处以供参考: http : //www.ruby-doc.org/core-2.1.2/Array.html#method-i-uniq

       <% @worlds.collect(&:latin).uniq.each do |latin| %> <%= latin.name %> <% end %> 

      这假设世界和拉丁语之间存在belongs_to关联(我假设这是因为World#latin_id字段以及有一个名为Latin的模型)。

      编辑:如果您有多个具有相同名称的拉丁文对象,则收集名称然后执行uniq

       <% @worlds.collect(&:latin).collect(&:name).uniq.each do |name| %> <%= name %> <% end %> 

      你可以尝试这个获得uniq拉丁名字

        <% @worlds.collect(&:latin).collect(&:name).uniq.each do |latin_name| %> <%= latin_name %> <% end %>