0
我有三个表格:账户,投资和游戏。投资有一个account_id,game_id和一些统计计数器,并且在账户第一次参与游戏时创建。如何在Ruby on Rails中有效地写这个查询?
我想提供最新的游戏的JSON列表与用户的在那场比赛的投资一起,就像这样:
[{id: 666, name: "Foobar", ..., investment: {tokens: 58, credits: 42, ...}},...]
如果他们还没有参加过比赛,我还是想包括使用默认值投资对象,所以我推翻在我的游戏模式serializable_hash
功能:
# game.rb
has_many :investments
def serializable_hash(options=nil)
options ||= {}
i = investments.find_or_initialize_by_account_id options[:uid]
{:id => id, ..., :investment => i.serializable_hash}
end
然而,当我运行像Game.find(list_of_ids).to_json(:uid => current_user.id)
,Rails会在投资表中的每个游戏一个单独的查询。我尝试了Game.includes(:investments).find(list_of_ids).to_json(:uid => current_user.id)
,但不仅会为所有用户加载投资,还会为每个游戏单独查询以查找或初始化投资对象。
简而言之,给出游戏ID和帐户ID列表,加载一个查询中存在的关联投资对象,并初始化其余部分,干净的方法是什么?
运行相同的查询,我上面有,Game.includes(:投资).find(LIST_OF_IDS) – icecream 2010-11-20 02:43:02
@Violet在这种情况下,它必须是'includes'通话这使他们分开。 – 2010-11-20 18:29:08