为" grouped_options_for_select"准备哈希值

时间:2015-12-01 17:26:04

标签: ruby-on-rails

我试图在我的视图中为选择准备哈希值。

目前我有这个丑陋的事情。

@platforms = {}
Platform.all.each do |platform| 
  @platforms[platform.name] = platform.game_updates
                                      .includes(:game)
                                      .where(game: {store_id: current_store.id})
                                      .map {|game_update| [game_update.name, game_update.game.id] }
end

我希望有这样的东西:

@platforms = {
  'Plateform America' => [['Fallout4',76896], ['Just',56774]],
  'Plateform Ed' => [[Fallout3',77445],['Fallout2',75674],['Mario',45677]]
}

我有两个问题。 Game可以有多个GameUpdates。目前列表显示所有game_updates。它就像拥有Fallout4.1Fallout4.2Fallout4.3而我只想要Games_update的最后一个Game

其他问题是重构第一个代码。我尝试使用group_by但没有成功。

由于

1 个答案:

答案 0 :(得分:1)

解决此问题的一种方法是在游戏桌中保留外键last_game_update。通过这种方式,游戏可以有许多更新但只有一次最后更新

class Game < ActiveRecord::Base
  has_many :game_updates
  belongs_to :last_game_update, class_name: GameUpdate
end

然后以确保游戏桌保持对游戏更新表的最新参考的小价格,您的查询变得更加简化