2012-03-11 6 views
1

모델 클래스에 값을 저장하려고합니다 (예 : 몇 개의 체크 박스 값).ActiveRecord의 클래스 인스턴스 변수 (Ruby On Rails)

클래스 인스턴스 변수에 저장할 수 있다고 생각했지만 사용자가 화면의 다른 곳을 클릭하면이 값이 지워집니다.

내 클래스 인스턴스 변수의 값을 어떻게 유지할 수 있습니까?

class Person < ActiveRecord::Base 

    def setAge(age) 
     @@age = age 

    def getAge 
     return @@age 

예를

를 들어

그러나,이 설정되는 후 @@ 나이가 비어있는 것 같습니다.

+0

이 코드는 확실히 당신이 문제에 받고있는 곳, 우리가 어떻게 알 수 있습니까 루비 아닌가요? –

+1

@NashBridges는 구문 론적으로 뉴턴 코드가 유효한 루비 코드입니다. 왜 그렇지 않다고 생각하니? –

+0

@KandadaBoggu 음 ... 여전히 편집 한 후에도 ... Python :) –

답변

3

레일 프레임 워크는 development 모드의 클래스를 다시로드합니다. 클래스 변수에 대한 이전 요청에서 설정된 값은 새 요청에서 유실됩니다. production 모드로 서버를 실행하면 코드가 작동합니다.

당신이 할하려는 것은 (@iltempo에서 언급 한 바와 같이) 당신이 경우

동시 요청이 상태를 덮어 쓸 수 있습니다 당신이 당신의 레일 서버의 여러 인스턴스를 생성 할 때이 솔루션이 작동하지 않습니다 같은 나쁜 관행이다 두 클라이언트 요청에 걸쳐 상태를 유지하려고하면 session 변수를 사용하는 것이 더 좋습니다.

요청 1

session[:age] = params['age'] 

요청이

u = User.new 
u.age = session[:age] 
1

@nash는 여기에 Ruby 코드가 없다고 언급 했으므로

그러나 클래스 수준에서 데이터를 저장하면 현재 프로세스에서만 유효합니다. 즉 승객 및 기타 웹 서버와 같은 여러 프로세스를 실행하는 경우 이러한 프로세스간에 데이터가 공유되지 않습니다.

또한 나이은 클래스 대신 Person 인스턴스와 관련이있는 것으로 들립니다.