Переменные экземпляра класса в Ruby - PullRequest
0 голосов
/ 13 февраля 2012

Я пытался получить динамический массив в рублях, который будет изменяться динамически.Я не смог нажать на переменную класса.Может ли кто-нибудь помочь, как я могу сделать это, пожалуйста, смотрите код ниже.

class SampleController < ApplicationController

  @@array = []
  @@x = 0

  def ajax_data    
    y = (rand()*100).round()
    @@array << [@@x,y]
    @@x += 1   
  end 

end

Мой вопрос заключается в том, что переменная класса @@array должна увеличивать размер массива всякий раз, когда мы вызываем метод ajax_dataно он всегда дает вывод одного значения, такого как [ [0, y] ].Я хочу увеличить значения @@array and @@x.

Как мы можем это сделать?

1 Ответ

3 голосов
/ 13 февраля 2012

Ruby on Rails в режиме разработки по умолчанию перезагружает исходные файлы при каждом запросе. Поскольку вы сохраняете состояние «программы» в переменных класса, эти изменения стираются при перезагрузке классов.

Кстати, переменные класса обычно используются с большой осторожностью, так как они по сути глобальные. Особенно в веб-приложении Rails. Сохраните любое состояние в базе данных, а не в контексте ваших классов.

Обновление:

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

В Rails, если что-то непростое, это обычно означает, что вы пытаетесь сделать то, что не должны делать :)

Если вы действительно не хотите использовать БД, и если счетчик не должен быть глобальным для всех посетителей вашей страницы, вы можете попробовать сохранить счетчик в cookie: http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...