我想做一些像使用实例变量
的事情def index
@balance=1000
enb
def increment
@balance+=1
end
我应该使用什么样的变量?
答案 0 :(得分:1)
有不同的方式来解释您的问题,不确定您的意思:
所有操作(在相同或不同的控制器中)都可以使用具有相同名称的实例变量。但每个HTML请求/响应周期只调用一个操作。
如果您希望在一个操作中设置实例变量并在另一个操作中具有相同的值(作为来自同一Web浏览器的不同请求的一部分),请使用会话存储。例如
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.