2011-08-16 8 views
0

나는 내 웹 사이트에 많은 코스를 가지고 있습니다. 나는 "코스에 가야한다"라는 형식을 가지고있다. 사용자가 유효한 코스 이름을 입력하면 해당 사용자를 코스 페이지로 리디렉션합니다.레일 3 : 레일 코드에서 라우팅 오류 확인

def courses 
    @title = "Courses" 
    @path = "#{root_path}"+"course/" + "#{params[:course]}" 
    if @path == "/course/" 
     @title = "Courses" 
     render 'courses' 
    else 
     redirect_to @path 
    end 
end 

경로가 존재하는 모든 유효한 입력에 대해 작동합니다. 사용자가 무효 경로를 초래할 수있는 무효 경로 이름을 입력 할 때 오류 케이스를 처리하고 싶습니다. 코드의 라우팅 오류를 확인하고 사용자에게 오류 메시지를 알려주고 싶습니다. ?이게 가능 "대신 컨트롤러에 사용자 정의 경로를 구축의

+2

리디렉션 전에 올바른 코스인지 확인하기 위해 데이터베이스를 쿼리하지 않는 이유는 무엇입니까? –

+0

왜 그런 방식으로 경로를 구축하고 있습니까? 대신 경로를 사용하지 않는 이유는 무엇입니까? 당신이 "틀에 반대하는"것처럼 보입니다. – corroded

+0

각 과정 페이지는 정적 인 페이지입니다. 원래이 방법을 구현했는데, 원래는 5와 같은 과정이 거의 없었기 때문에 지금은 많이 가지고 있습니다. 나는 단지 새로운 컨트롤러를 구현할 것이라고 생각한다. – Wasi

답변

2

, 레일 규칙을 사용하고 설정/routes.rb에 배치 :이/경로/교육 과정을 만들어

resources :courses 

: ID를 당신을 위해 . 당신이 당신의 모델, 컨트롤러 및 routes.rb를 포함한다면 도움이 될

def show 
     @title = "Courses" 
    end 

당신은 당신의 경로가 유효한지 확인하기 위해 이것을 사용할 수
+0

모델이 없거나 .. ..이 코스는 정적 페이지 일 뿐이므로 config/routes.rb에서 수동으로 경로를 할당받습니다. – Wasi

+0

레일스가 기반으로하거나 다른 프레임 워크를 선택하는 MVC 아키텍처를 사용하는 것이 좋습니다. – airlok

1

: 그런 다음 컨트롤러에 간단합니다. :

def check_route(route) 

    @route_valid = true 
    begin 
     ActionController::Routing::Routes.recognize_path(@route, :method => :get) 
    rescue 
     # error means that your route is not valid, so do something to remember that here 
     @route_valid = false 
    end 
end 

일반적으로 코스를 기반으로하는 경로를 만드는 것에 대한 아이디어가 마음에 들지 않습니다. 왜 단순한 파인더를 사용하지 않는 것이 좋을까요?

+0

네 말이 맞아요, 난 아직도 레일을 배우고 있어요. 익숙해지기. 나는이 논리를 더 이상 따르지 않을 것이다. 나는 과정의 데이타베이스를 창조하고 나는 사용자를 방향을 바꾸기 전에 데이타베이스를 질문한다. – Wasi