2012-06-21 4 views
1

컨트롤러에 새 메서드 내에서 변수 @products = Product.all이 정의되어 있습니다. 양식의 선택 상자에 표시 될 db 테이블의 값을 포함합니다.유효성 검사 오류로 인해 nil 변수가 생깁니다.

create 메서드가 유효성 검사 오류를 발생시킬 때 나는 render :action => 'new'을 호출합니다.

다른 모든 변수는 잘 돌아 올 것 같다,하지만 @products 다시 내가 여기 실종 무엇 전무

로 제공됩니다.

+0

'@ products' 또는 @ product'? 당신은 여기 둘 다 가지고 있어요. 둘 다 코드에 포함되어 있습니까? – sarnold

+0

사과입니다. @products입니다. – ShaggyInjun

답변

3

render :action => new를 호출하기 전에 인스턴스화되어야 할 것이다 -는 현재 컨트롤러에 new 조치를 실행하지 않습니다, 예상대로.

http://guides.rubyonrails.org/layouts_and_rendering.html#using-render에서

: :actionrender를 사용

레일 이민자를위한 혼란의 빈번한 소스입니다. 지정된 동작은 렌더링 할 뷰를 결정하는 데 사용되지만 Rails는 컨트롤러에서 해당 동작에 대한 코드를 실행하지 않습니다. 뷰에 필요한 인스턴스 변수는 render을 호출하기 전에 현재 작업에서 설정해야합니다.

0

render :action => 'new'은보기를 렌더링 만하고 컨트롤러에서 새 메서드를 호출하지 않습니다. 그래서 새로운 방법에서 인스턴스화 된 모든 변수는 바로 new 행동에 대한 보기를 렌더링 ActionView을 요구하고있다 render :action => 'new'

1

render :action => :new 대신 redirect_to :action => :new을 사용할 수 있습니다. 이렇게하면 모든 인스턴스 변수가 올바르게로드되고 create 작업에서 전체 new 논리를 복사하지 않아도됩니다.

행운을 빈다.

관련 문제