Найти соответствующий объект, если он существует, в противном случае производят его в Рубин


У меня есть упрощенная модель, которая выглядит как эта:

class Player < ActiveRecord::Base
  has_many :picks

  def pick_for_game(game)
    id = game.instance_of?(Game) ? game.id : game
    pick = picks.find {|pick| pick.game_id == id}
    if !pick
      pick = picks.build(:game_id => id)
    end
    pick
  end
end

Метод pick_for_game обычно вызывается кучу раз, когда действие выполняется. Что бы быть хорошим способом, чтобы сделать эту работу качественно код список игр?



484
4
задан 30 марта 2011 в 05:03 Источник Поделиться
Комментарии
1 ответ

Вы можете использовать find_or_initialize_by динамического поиска, см. Руководство здесь

Это будет эквивалентно код:

def pick_for_game(game)
game_id = game.instance_of?(Game) ? game.id : game
picks.find_or_initialize_by_game_id(game_id)
end

Надеюсь это поможет вам!.

6
ответ дан 30 марта 2011 в 08:03 Источник Поделиться