2012-02-13 5 views
0

동적으로 변경 될 RUBY의 동적 배열을 가져 오려고했습니다. 클래스 변수를 푸시 할 수 없습니다. 어느 누구도 내가 할 수있는 방법을 아래의 코드를 참조하십시오.Ruby의 클래스 변수 인스턴스 변수

class SampleController < ApplicationController 

    @@array = [] 
    @@x = 0 

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

end 

내 질문은 우리가 방법 ajax_data에 전화를하지만 항상이 [ [0, y] ] 같은 하나 개의 값의 출력을 제공 할 때마다 @@array 변수 클래스가 배열의 크기를 증가해야한다는 것입니다. @@array and @@x 값을 늘리고 싶습니다.

어떻게 할 수 있습니까?

+0

저는 코드를 사용하여 @@ array http://pastie.org의 올바른 값을 가져 왔습니다./3372267 – ck3g

답변

3

개발 모드의 Ruby on Rails는 기본적으로 각 요청에서 소스 파일을 다시로드합니다. "프로그램"의 상태를 클래스 변수에 저장하고 있기 때문에 클래스를 다시로드하면 변경 사항이 지워집니다.

그런데 클래스 변수는 일반적으로 전역 변수이므로 매우주의해야합니다. 특히 Rails 웹 응용 프로그램에서. 클래스의 컨텍스트가 아닌 데이터베이스에 모든 상태를 저장하십시오.

업데이트 :

웹 서버 프로세스는 일반적으로 무국적 있어야되는 기억하십시오. 또한 일반적으로 프로덕션 환경에서 실행중인 여러 프로세스가 있습니다. 즉 요청에 응답 할 프로세스에 따라 카운터가 달라집니다. 또한 프로세스가 다시 시작될 수 있으므로 카운터가 손실 될 수 있습니다. 일이 힘들 경우 레일에

, 그것은 일반적으로 당신이 경우에 당신이 정말 DB를 사용하지 않으려면 :

을하지 말아야 할 일을하려고하고있어 의미 카운터가 페이지의 모든 방문자에게 전역 적이라고 가정하지 않으면 카운터에 쿠키를 저장하려고 시도 할 수 있습니다. http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html

+0

회신 팔머에게 감사드립니다. 요청이 루비에서 그 메소드에 올 때 @@ 배열 증가와 같은이 기능을 수행 할 수있는 방법이 있습니까? 데이터베이스에 저장하고 싶지 않습니다. – user1204730

+0

답변을 업데이트했습니다. –

+0

감사합니다. 그걸 시도하고 알려주지. – user1204730

관련 문제