2012-01-24 21 views
2

私は名前空間を使ってAPIを宣言しようとしています。Railsと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 

私がヒット:API/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

私はそれを得ました。私は 'namespace'の代わりに' scope'を使うべきです。 – mrudult

関連する問題