Например, следующий код:
class FoosController < ApplicationController
def index
if !@foo.nil?
render :locals => {:bar => @foo}
return
else
@foo = rand 10
render :locals => {:bar => @foo}
end
end
end
если я загружу localhost:3000/foos
несколько раз, он покажет разные значения, и это не удивительно, если это режим разработки, потому что Rails перезагрузит контроллер(и модель, и вид) каждый раз, когда поступает запрос браузера.
Но даже когда в рабочем режиме, когда все загружено и остается там, значение @foo
не останется в запросах браузера?Каждый раз при перезагрузке страницы в веб-браузере отображается другое число.То есть Rails каждый раз будет стирать все значения?Есть ли способ кэшировать или «запоминать» результаты по запросам, если мы не используем СУБД?
Удивительно, но я только что попытался использовать переменную класса, и в режиме разработки это даетразные номера каждый раз.В производственном режиме число остается неизменным в Firefox, и затем Chrome также будет показывать это число все время, пока сервер не будет перезапущен:
class FoosController < ApplicationController
@@foo = nil
def index
if !@@foo.nil?
render :locals => {:bar => @@foo}
return
else
@@foo = rand 10
render :locals => {:bar => @@foo}
end
end
end
Почему переменная класса может запоминать, а переменная экземпляра может«т?Является ли использование переменной класса надежным способом надежного «запоминания» в запросе в Rails 2.x, 3.x и Ruby 1.8.7 и 1.9.2?