Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby实例变量nil_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Ruby实例变量nil

Ruby on rails Ruby实例变量nil,ruby-on-rails,ruby,Ruby On Rails,Ruby,我试图测量在一页上花费的时间。我试图在控制器的实例变量中存储打开和关闭时间;但是,它们要么不初始化,要么为零。这是我的密码: 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 e

我试图测量在一页上花费的时间。我试图在控制器的实例变量中存储打开和关闭时间;但是,它们要么不初始化,要么为零。这是我的密码:

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

每次显示我要测量的时间的页面时,都会调用Show。当我检查访问数据时,数字为零,花费的时间为0.0。

您不能使用实例变量在请求之间共享状态。在每个请求结束时,控制器实例将被完全销毁,并且在下次将请求路由到其某个操作时,将创建控制器的新实例


如果要持久化数据,您需要使用数据或将数据发送到客户端,并通过
字段持久化数据,以便在后续请求中将其发送回。

您在哪里设置@time\u opened?我不认为这是实现您试图实现的目标的最佳方法,但我认为您从未为@time\u openedy设置过值您也可以使用类变量。它们在请求之间保留,但在不同的应用程序服务器进程之间仍然不共享。一个更常见的解决方案是使用日志系统,或者至少在每次访问时添加/更新数据库记录。@Holger您可以这样做,但绝对不应该这样做,所以不值得一提。