У меня есть фрагмент кода, который получает связанный объект по идентификатору, в противном случае он инициализирует новый объект.
def pick_for_game(game_id)
picks.find_or_initialize_by_game_id(game_id)
end
В коллекции выбора обычно содержится несколько сотен элементов.Два варианта использования:
Я хочу вызвать этот метод для 15-30 игр
Я хочу вызвать этот метод для всех игр
Похоже, что текущий подход подходит для варианта использования a, но абсолютно ужасен для варианта использования b.Я мог бы усложнить этот метод, основываясь на том, загружены ли пики с готовностью, как показано ниже:
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
Однако, выбор одного подхода по сравнению с другим для всех случаев имел бы какую-то ценность, кроме как сделать коднемного чище?Любые другие решения этой проблемы?