2011-12-01 2 views
0

저는 몇 가지 기본 레일스 스캐 폴딩을 사용하고 있으며 컨트롤러에서 전달 된 데이터를 표시하기 위해 뷰에서 인스턴스 변수가 자주 사용된다는 것을 알고 있습니다. 내 응용 프로그램에서레일스 - 인스턴스 변수 nil 객체보기

는,이 코드를 가지고있는 인덱스 행동 몇 가지 샘플 (results = Result.all를 사용하여 내가 콘솔에서 뽑을 수) 데이터베이스의 사용자 내 results_controller 파일에서

를,있다 (레일에 의해 자동으로 생성)

@results = Result.all 

그래서 알아 및 NEW.html.erb (안 index.html.erb에서)의 상단에 얼마나 많은 사용자를 표시하고 싶었다 그래서 나는이

를 넣어 10

보기/결과/NEW.html.erb하지만 그것은 나에게 nil 개체에 대한 오류 메시지를 내게했다. 설명 할 수 있니? 내가 INDEX.html.erb이

<%= @results.count %> 

를 넣어 경우

You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.count 

그러나, 그것은 수 ...

참고 표시 :이 일의 목적은 다음이었다 :에 new.html.erb, 사용자가 간단한 정보를 입력 할 수있는 양식이 있습니다. 얼마나 많은 사람들이 이미 정보를 제출했는지 그 페이지에서 사용자에게 알려주는 < % = @ results.count %>을 사용하는 계획을 사용 중입니다 ...

이 stackoverflow 질문에 대답 할 수 없다면, 다른 방법으로 설명 할 수 있습니까? 같은 효과를 얻으려면?

+0

이 같은 레일 환경 (데이터베이스)에 따라이를 시도 :

def new @result = Result.new @results = Result.all end 

또한의 @results 인스턴스 방법을 대체 할 수 : 그래서 당신이 뭔가를 보이는 코드를 가지고해야합니까? – m33lky

+0

예, 동일한 앱, 동일한 환경, 동일한 데이터베이스 ... @ results.count는 index.html.erb에서 작동하지만 new.html.erb에서는 작동하지 않습니다. – Leahcim

+0

'@results = Result.all' new' 액션과'index' 액션을 제공합니다. – zetetic

답변

1

질문에 명시되어 있지 않으므로 이미 작성 하셨다면 용서해주세요. 그러나 인스턴스 변수는 현재 액세스하는 작업과 관련된 메서드에서 선언해야합니다. 이 경우 새로운 동작입니다.

@results_count = Result.count 
+0

도움을 주셔서 대단히 감사합니다. – Leahcim

+0

문제 없습니다. 기꺼이 도와주세요. – adimitri

관련 문제