2012-01-24 2 views
2

Я пытаюсь использовать пространства имен для объявления api.Rails and Devise - пространство имен является неинициализированной константой

Мой routes.rb содержит:

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 * выглядит следующим образом:

class Api::V1::TokenAuthenticationsController < ApplicationController 

... 

    def log_in 

    ... 

    end 

... 

end 

Когда я попал: апи/v1/log_in я получаю:

Ошибка маршрутизации
неинициализированная константа Api

Так что мне нужно объявить пространство имен где-нибудь?

ответ

8

Rails ожидает, что пространства имен будут следовать структуре каталогов, если я не ошибаюсь.

С учетом вашего названия класса для вашего контроллера, 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

Хорошо, я понял. Я просто должен использовать 'scope' вместо' namespace'. – mrudult

Смежные вопросы