【发布时间】:2011-04-11 19:40:39
【问题描述】:
我有一段代码通过 id 获取关联对象,否则它会初始化一个新对象。
def pick_for_game(game_id)
picks.find_or_initialize_by_game_id(game_id)
end
picks 集合中通常包含数百个项目。这两个用例是:
我想为 15-30 场比赛调用此方法
我想为所有游戏调用这个方法
目前的方法似乎适用于用例 a,但对于用例 b 来说绝对糟糕。我可以根据picks是否像下面这样急切地加载,使这个方法变得复杂:
def pick_for_game(game_id)
if picks.loaded?
new_pick = proc {
Pick.new do |p|
p.game_id = game_id
end
}
picks.detect(new_pick) do |p|
p.game_id == game_id
end
else
picks.find_or_initialize_by_game_id(game_id)
end
end
但是,除了使代码更简洁之外,在所有情况下选择一种方法而不是另一种方法还有什么好处吗?此问题还有其他解决方案吗?
【问题讨论】:
标签: ruby-on-rails ruby activerecord data-access