Ruby实例变量为零

gen*_*han 0 ruby ruby-on-rails

我正在尝试衡量在页面上花费的时间.我试图将开启和关闭时间存储在控制器的实例变量中; 但是,它们要么不初始化要么为零.这是我的代码:

def table
    @numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
    if @time_opened.nil?
        @time_opened = 1
        @open_time = 0.0
        @close_time = 0.0
    else
        @time_opened += 1
    end

    if @open_time > 0.0
        @close_time = Time.now
    end

    @visit = Visit.new({number: @number, time_spent: @close_time - @open_time})
    @visit.save
end

def show
    url = request.url
    @number = url[url.rindex('/')+1..-1]
    @title = @number

    @open_time = Time.now
end
Run Code Online (Sandbox Code Playgroud)

每次显示我想要测量的页面时,都会调用显示.当我检查访问数据时,number为nil,time_spent为0.0.

mea*_*gar 7

您无法使用实例变量跨请求共享状态.您的控制器实例在每个请求结束时被完全销毁,并在下次将请求路由到其中一个操作时创建控制器的新实例.

如果要保留数据,则需要使用session或将数据发送到客户端并通过<input type="hidden">字段保留它,以便可以随后发送回请求.