2011-09-05 2 views
2

이것은 정말 나를 미치게합니다. 나는 이것에 단단한 2 시간을 보내고 나는 그것을 다만 파악할 수 없다! 내가하려는 일은 YAML 파일에 ERB를 사용하여 YAML 파일에 레일 경로를 포함시키는 것이다. 짧게 말하면 YAML 파일에서 semanic 메뉴를 만들기 위해 나중에 다시 읽어 들일 것입니다.YAML 파일에서 ERB를 통한 레일스 경로 사용

logged_in: 
    dashboard: 
    text: "Dashboard" 
    url: <%= url_for dashboard_path %> 
:의 효과에 뭔가를 가지고있는 YAML 파일 menu.yml에서

menu_yml= "#{Rails.root}/config/menu.yml" 
config = YAML.load(ERB.new(IO.read(menu_yml)).result) 
MENU_CONFIG = config 

: 나는 초기화 _load_config.rb에서 (ERB 포함) YAML 파일과는 다음과 같습니다로드하는 코드를로드하고

(erb):4:in `<main>': undefined local variable or method `dashboard_path' for main:Object (NameError) 

나는 감히 많은 디버깅에서이은을로드 루트 때문이다 :

문제는 <%= url_for hasboard_path %>가 발생하고 오류이다 이 초기화 프로그램을 종료하십시오. 이 문제를 해결하는 방법에 대한 제안은 매우 감사하겠습니다!

P. 이것은 레일즈 3.1.rc5를 사용하고 있습니다.

답변

1

오류가 발생하는 이유는 url_for이 ActionView의 도우미이므로 이니셜 라이저가 실행될 때 액세스 할 수 없으므로 모델이나 콘솔에서 호출 할 경우 작동하지 않으므로 그 이니셜 라이저 다음에 문제가 반드시 경로가로드되고있는 것은 아닙니다.


난 당신이 대시 보드 경로가 설정되어있어 정확히 어떻게 잘 모르겠어요 그리고 필요한 이유 동적으로 menu.yml에 연결되어야한다. URL을 통해 전송 된 매개 변수가 없다고 가정하면 (URL이 url_for '로 전달되지 않으므로) 라우팅을 위해 match을 사용하고 있습니다. routes.rbmenu.yml으로 참조되는 전역 변수 또는 환경 변수가 있으면 필요한 것.

boot.rb

require 'rubygems' 

DASHBOARD_URL = '/dashboard' 
... 

routes.rb

match DASHBOARD_URL => 'dashboard#index' 

menu.yml

logged_in: 
    dashboard: 
    text: "Dashboard" 
    url: DASHBOARD_URL 
+0

나는 이것에 대해 생각하지 않았다! 정말 고맙습니다! –