rails: как мы называем переменную, которую мы можем использовать во всех действиях, принадлежащих одному контроллеру? - PullRequest
0 голосов
/ 29 июня 2010

Я хотел бы сделать что-то вроде использования переменных экземпляра

def index
 @balance=1000
enb

def increment
 @balance+=1
end 

какую переменную мне следует использовать?

1 Ответ

1 голос
/ 29 июня 2010

Существуют разные способы интерпретации вашего вопроса, даже если вы не уверены, что вы имели в виду:

Все действия (в одном или разных контроллерах) могут использовать переменные экземпляра с одинаковыми именами.Но в каждом цикле запроса / ответа HTML вызывается только 1 действие.

Если вы хотите, чтобы переменная экземпляра была установлена ​​в одном действии и имела такое же значение в другом действии (как часть другого запроса из того же веб-сайта)браузер), используйте магазин сессий.Например,

def index
   @balance=1000
   # @balance can be used in views
   session[:balance] = @balance # now stored for the rest of the user's session
end

def increment
   @balance = session[:balance] # initialize
   @balance += 1
   session[:balance] = @balance # update
end 

####################################################

# a DRYer way is to use a filter to set the value
# Added, also we set the value to 0 if nil so it can later be added to.
# Remember that nil + 1 => error. 
before_filter :load_balance
def load_balance
  @balance = session[:balance] || BigDecimal.new('0') # use BigDecimal
                                                      # for money calculations
end

# the filter can be set per controller.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...