2014-05-24 4 views
2

레일에서 정적 페이지 전략에 문제가 있습니다.UrlGenerationError : 경로 일치, 필수 키 누락 및 link_to

정적 페이지를 처리하는 컨트롤러가 있습니다. 기본적으로 app/views/static 디렉토리의 템플릿을 읽고 질문대로 렌더링합니다. 그래서 같이 : 루트 경로가 잘 작동

Rails.application.routes.draw do 
    root 'static#show', page: 'home' 
    get ':page', to: 'static#show', as: :static, constraints: { page: /a-zA-Z\-_\/+/ } 
end 

, 내가 잘보기에 액세스 할 수 있어요 :

class StaticController < ApplicationController 
    def show 
    templ = File.join(params[:controller], params[:page]) 
    puts params, templ 
    render templ 
    rescue ActionView::MissingTemplate => e 
    if e.message =~ %r{Missing template #{templ}} 
     raise ActionController::RoutingError, 'Not Found' 
    else 
     raise e 
    end 
    end 
end 

이 내 루트입니다. 나는 오류가 없다. 지금, 내 헤더 부분에, 나는 단순/관련성에 대한 수정이를 가지고 :

<%= link_to('Home', static_path(:home)) %> 

부분 또는 기본 템플릿에 다른 루비 코드가 없습니다. 내가 뭘 잘못하고 있는지 모르겠다. 오류는 단지 의미가 없습니다.

ActionController::UrlGenerationError - No route matches {:action=>"show", :controller=>"static", :format=>nil, :page=>:home} missing required keys: [:page]

경우 정확히 필요한 키에서 누락? 다른 물건이나 모델이 없습니다.

지금이 잘 작동합니다 :

<%= link_to('Home', controller: 'static', action: 'show', page: 'home') %> 

그래서 내가 어떻게 그런 static_path 작업을해야합니까?

감사합니다.

답변

1

나는 문제가 템플릿이 컨트롤러에있는 경우 이미 확인, 나는이 경로의 정의에서 놓는 게 좋을 것 당신의 제한 조건에 대해 사용하여 정규 표현식에 있다고 생각.

또한 정적 페이지 생성을 잘 처리하는 high_voltage 보석을 확인해야합니다.

+0

정규식을 삭제하면 문제가 해결되었습니다. – fspy

0

내 첫번째 추측은 다음과 같습니다

<%= link_to 'Home', static_path("home") %> #-> try passing a string, rather than symbol 

허용한다 이것은 당신이 필요한 경로

참조하는 - 나는 개인적으로이 훨씬 간단 할 것

class StaticController < ApplicationController 
    def show 
    templ = File.join(params[:controller], params[:page]) 
    puts params, templ 
    render templ 
    rescue ActionView::MissingTemplate => e 
    if e.message =~ %r{Missing template #{templ}} 
     raise ActionController::RoutingError, 'Not Found' 
    else 
     raise e 
    end 
    end 
end 

를 :

class StaticController < ApplicationController 
    def show 
    render "pages#{params[:page]} 
    end 
end 
+0

문자열, 해시, 배열 등의 조합을 static_path() 내부에서 처리 할 수 ​​없습니다. 새로운 컨트롤러를 사용할 수 없습니다. 페이지 홈. 내가 페이지 번호의 가정을위한 페이지를 ## {...}했지만, 새로운 오류를 작업에 방해 할 수 없습니다. 경로에서 정규 표현식을 삭제했습니다. – fspy

+0

LOL 괜찮습니다. 적어도 당신은 정직합니다! 업데이트 주셔서 감사합니다 - 진심으로 당신을 위해 계속 노력하길 바래! –