2016-09-07 2 views
0

Я пытаюсь измерить количество времени, проведенного на странице. Я пытаюсь сохранить время открытия и закрытия в переменной экземпляра контроллера; однако они либо не инициализируются, либо не равны нулю. Вот мой код:Переменные экземпляра Ruby nil

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 вызывается каждый раз, когда отображается страница, на которую я хочу измерить. Когда я проверяю данные о посещении, число равно nil, а time_spent - 0.0.

+0

Где вы устанавливаете @time_opened? Я не думаю, что это лучший подход к тому, что вы пытаетесь выполнить, но я не думаю, что вы когда-либо устанавливаете значение для @time_opened –

ответ

7

Вы не можете обмениваться данными между запросами, используя переменные экземпляра. Экземпляр вашего контроллера полностью уничтожается в конце каждого запроса, и новый экземпляр вашего контроллера создается при следующем обращении запроса к одному из своих действий.

Если вы хотите сохранить данные, вам необходимо либо использовать session, либо отправить данные клиенту и сохранить его с помощью полей <input type="hidden">, поэтому его можно отправить с последующим запросом.

+0

Вы также можете использовать переменные класса. Они сохраняются между запросами, но до сих пор не используются для разных процессов сервера приложений. Более распространенным решением является использование системы ведения журнала или, по крайней мере, добавление/обновление записи базы данных при каждом посещении. –

+0

@HolgerJust You * could *, но вы абсолютно не должны этого делать, поэтому его действительно не стоит упоминать. – meagar

Смежные вопросы