Вы часто видите методы, присваивающие переменные экземпляра для кэширования, как это.
def list_of_available_cars
@allcars ||= AvailableCar.all.map { ... }
end
При первом вызове list_of_available_cars
будет выполнено AvailableCars.all...
, а результат будет сохранен в переменной экземпляра. В последующее время сохраненное значение будет возвращено.
Чтобы это работало таким образом, вам нужно будет повторно использовать один и тот же экземпляр класса обслуживания.
checker = CarChecker.new
cars.each do |car|
checker.car_is_available?(car)
end
Если вам нужно каждый раз использовать новый экземпляр CarChecker
, тогда вы можете использовать переменную класса вместо переменной экземпляра (т.е. использовать @@
вместо @
):
def list_of_available_cars
@@allcars ||= AvailableCar.all.map { ... }
end
Пока ваш AvailableCar.all.map { ... }
всегда будет возвращать один и тот же результат, это должно быть хорошо.