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您可以这样做,但绝对不应该这样做,所以不值得一提。