rails:我们如何调用一个变量,我们可以在属于同一个控制器的所有动作中使用它?

时间:2010-06-28 21:58:09

标签: ruby-on-rails variables scope

我想做一些像使用实例变量

的事情
def index
 @balance=1000
enb

def increment
 @balance+=1
end 

我应该使用什么样的变量?

1 个答案:

答案 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.