2011-08-03 13 views
0

내 레일 애플 리케이션에서 다음과 같은 방법이 있습니다 :해시에 변수를 사용하려면 어떻게해야합니까?

def navigation_menu(items) 
    # raise items.class.to_s 
    # raise items.to_yaml 
    render partial: 'global/navigation_menu', locals: items 
end 

메서드의 첫 번째 줄의 주석 처리를 제거하면 해시가 예외 텍스트로 표시되어 items가 해시임을 증명합니다. 두 번째 줄의 주석 처리를 제거하면 해쉬 멤버가 표시되므로 비어 있지 않습니다.

그 방법은 다음 오류로 실패합니다.

comparison of String with :navigation_menu failed 

locals: itemslocals: { dummy_key: 'dummy value' }로 바꾸면 작동합니다.

명시 적 해시 대신 items 변수를 사용할 수없는 이유는 무엇입니까?

답변

2

여기에 Ruby/Rails newb가 있지만 문제는 같았습니다. 지역 주민은 옵션 해시입니다. 따라서 무엇이든 전달할 수 있습니다. 지역 주민은 옵션의 해시가됩니다.

당신은이 방법을 코딩해야하고, 당신이 설득력 루비를 읽는다면, 그것은 왜 한국 - 매개 변수는 괄호를 생략 할 수있는 마지막 해시가 아닌 ...

render partial: 'global/navigation_menu', :locals => { :items => item } 

을하거나

을 선호하는 경우
render partial: 'gloabl/navigation_menu', locals: { items: items } 

중괄호는 두 구문 중 하나에 있어야합니다. 첫 번째 예에서는 중괄호를 사용하지 않았지만 그러나 둘째로 나는 그것들이 필요하다고 믿는다.

희망이 도움이됩니다. 당신이 작동합니다 쓴, 나는 종종 이런 식으로 진행

render :partial => "global/navigation_menu", :locals => { :items => items } 
+0

현재 해결 방법이 있습니다. 그러나 나는 중개 항목'items' 변수를 원하지 않습니다.': ('기본적으로'local_assigns [: items]'을 사용하지 않으려 고 노력하고 있습니다. 왜 그 자리에 하나를 만들지 않고 직접 해시를 전달할 수 없는지 모르겠습니다 . + 1에 관계없이. – ClosureCowboy

1

나는 당신이 화살표 '=>'을 포함하고이 같은 해시 {}에 넣어해야 할 것 같아요.

그러나 특별한 경우가 있습니다. 키가 문자열 인 해시가 올바르게 해석되지 않습니다. 그래서 해시에 symbolize_keys를 추가 할이 경우 필요한입니다 :

render partial: 'global/navigation_menu', locals: items.symbolize_keys 
1

당신은 단순히 두 번째 매개 변수로 지역 주민을 통과 할 수없는 이유는 render()에 옵션의 해시를 지정하는 것입니다 -이 경우 귀하의 해시 :partial을 포함합니다. 당신이 render에 대한 documentationcode를 보는 경우에, 당신이 방법은 다음과 같이 정의되는 것을 볼 수 있습니다 : 당신이 부분 조금 렌더링에 대한 호출을 단축하려는 경우,

def render(options = {}, locals = {}, &block) 
... 
end 

지금, 거기에있는 옵션이없는 부분을 렌더링 할 때 단축키 : "옵션 해시가 전달되지 않거나 : 지정된 업데이트가 없으면 기본값은 부분을 렌더링하고 두 번째 매개 변수를 지역 해시로 사용하는 것입니다." 다음과 같은 작업을 수행 할 수 있습니다

render 'global/navigation_menu', items 

체크 아웃 추가 정보를 위해 partials documentation에서 '기본 케이스를 렌더링'.

관련 문제