2011-08-11 5 views
2

일부 부분 변수에는 렌더 할 템플릿에 의해 전달 될 수도 있고 전달되지 않을 수도 있습니다 (예 : on_question_page). 내가 페이지에 있다면 사실로 전달하지만 다른 곳에서는 건너 뜁니다.부분적으로 정의되지 않은 변수를 참조하는 방법은 무엇입니까?

문제는 내가 정의한 곳에서 오류가 발생하기 때문에 해당 변수를 직접 참조 할 수 없다는 것입니다.

내가 내 파셜의 상단에 같은 코드의 많은 끝낼 것을 의미한다 :

on_question_page = defined?(on_question_page) ? on_question_page : false 

지저분한을. 이러한 선택적 변수에 액세스하는 더 깨끗한 방법이 있습니까?

답변

1

을 사용할 수 있습니다.

# whatever_helper.rb 
def local_set(ref, view_binding) 
    eval(ref.to_s, view_binding) 
rescue NameError 
    false 
end 

# my_neet_view.html.erb 
<h1>Question</h1> 

<%= local_set("on_question_page", binding) %> 

바인딩은 우리가 헬퍼에 뷰의 평가 컨텍스트를 통과하고 거기에 모든 지저분한 작업을 수행 할 수 :

0

항상 포함 된 부분에 기본값을 정의하고 부분적으로 재정의하는 것은 어떻습니까?

그런 식으로 사용할 수 있는지 확인할 필요가 없으며 필요한 경우 쉽게 기본값을 변경할 수도 있습니다.

+0

그게 효과가 있지만 좀 더 지역화 된 것을 원했습니다. 결국 해결책은 결국했습니다 –

1

당신은, 당신은 on_question_page은 즉, 정의되지 또는 false 또는 nilfalse 경우 할당 on_question_page ||= false를 사용할 수있는 부울 연산자로 테스트 할 때 false로 평가 뭔가를 ||= 운영자

on_question_page ||= false 
+0

그 대답이었습니다. 고마워요 –

0

나는 솔루션 바인딩 및 도우미를 사용하는 것입니다 생각합니다. 이렇게하면 로직이 뷰에서 벗어나 도우미로 이동합니다.

+0

좋아, 내 솔루션은 더 복잡한 waaay입니다. 나는 이전에 바인딩을 사용할 곳을 생각하지 못했고 자신보다 앞서 있다고 생각합니다. –

+0

:) 어쨌든 고마워요. –

관련 문제