将多个对象合并在一起的更有效方法



所以我正在尝试创建一个包含多个对象的数组,但首先我需要将两种对象合并为一个,然后将其添加到数组中。这样做的原因是,我可以在视图中循环遍历数组并轻松显示内容。我正在使用树不同的对象,用户,玩家和团队。用户通过玩家拥有多个玩家和多个团队。我需要直观地显示来自团队对象和玩家对象的信息,但我需要将它们合并到单个对象中并将其插入到数组中。因此,我将为玩家拥有的每个团队/球员执行此操作,并将它们插入到包含所有团队/玩家的数组中。

这是我对此的破解

    array = []
    @user.players.each do |player|
        @user.teams.each do |team|
            if player.team_id == team.id
                array << UserTeam.new(:id => team.id,
                                      :name => team.name,
                                      :tag => team.tag,
                                      :description => team.description,
                                      :recruiting => team.recruiting,
                                      :wins => team.wins,
                                      :losses => team.losses,
                                      :t_wins => team.t_wins,
                                      :rating => team.rating,
                                      :role => player.role,
                                      :position => player.position)
            end
        end
    end
    @teams = array

这有效,我得到了我想要的结果,但我相信这是一种非常低效的方法。有什么更好的方法呢?谁能帮助菜鸟轨道开发?

很难确定为什么你实际上将所有内容都集中在一个对象中。你打算用结果做什么?如果这只是为了显示目的,您可以使用更简单、更优雅的东西。

假设

模型

class User < ActiveRecord::Base
  has_many :players
  has_many :teams, through: :players
end
class Player < ActiveRecord::Base
  belongs_to :user
  belongs_to :team
end
class Team < ActiveRecord::Base
  has_many :players
end

控制器

@players = @user.players.includes(:team)

视图

<table>
  <thead>
    <tr>
      <th>Team Id</th>
      <th>Team Name</th>
      <!-- other team columns -->
      <th>Player Role</th>
      <th>Player Position</th>
    </tr>
  </thead>
  <tbody>
  <% @players.each do |player| %>
    <tr>
      <td><%= player.team.id %></td>
      <td><%= player.team.name %></td>
      <!-- other columns -->
      <td><%= player.role %></td>
      <td><%= player.position %></td>
    </tr>
  <% end %>
  </tbody>
</table>

最新更新