2012-01-24 1 views
2

api를 선언하기 위해 네임 스페이스를 사용하려고합니다.레일 및 Devise - 네임 스페이스가 초기화되지 않은 상수입니다.

devise_scope :user do 
    namespace :api do 
     namespace :v1 do 
     match 'log_in', :to => 'token_authentications#log_in', :via => "post" 
     end 
    end 
    end 

그리고 내 * token_authentications_controller.rb * 보이는이 같은 :

routes.rb이 포함

class Api::V1::TokenAuthenticationsController < ApplicationController 

... 

    def log_in 

    ... 

    end 

... 

end 

I 횟수 : API/V1/log_in 내가 얻을 :

라우팅 오류
초기화 상수 API 광고

그래서 네임 스페이스를 어딘가에 선언해야합니까?

답변

8

레일즈는 내가 틀리지 않는 한 네임 스페이스가 디렉토리 구조를 따르길 기대합니다.

컨트롤러의 클래스 이름이 Api::V1::TokenAuthenticationsController 인 경우 레일스는 app/controllers/api/v1/token_authentications_controller.rb에있을 것으로 예상합니다.

컨트롤러를 올바른 폴더로 옮기면 문제가 없다고 생각합니다.

또한 실제로 같은 컨트롤러를 리팩토링 예를 들어 같은 곳 네임 스페이스 모듈을 선언해야합니다 할 수 있습니다 :

module Api 
    module V1 
    class TokenAuthenticationsController 

... 

    end 
    end 
end 
+0

은 폴더 구조였다. 모듈을 선언 할 필요가 없습니다. 암시 적이어야합니다. 감사. – Undistraction

+0

@Frost URL에 네임 스페이스를 추가하고 디렉토리 구조를 변경하지 않거나 모듈 이름을 컨트롤러 이름에 프리픽스로 추가하려는 경우 어떻게해야합니까? – mrudult

+1

알겠습니다. 나는'namespace' 대신'scope'를 사용해야합니다. – mrudult

관련 문제