2016-09-10 30 views
0

私はmanagercustomerコントローラを持っています。 特定のマネージャのすべての顧客をリストしたいときは、マネージャshowのアクション(マネージャに固有のものだったため)を使用していました。したがってif customer_idが見つかった場合、別の戻り値が生成されます。しかし、それは枝があれば(時には巨大な)私たちを残しました。名前空間と同じ名前のモデルにアクセスしているレールのネストされた名前空間

Class Api::V1::ManagerController < ApiBaseController 
    def show 
    if params.key?[:customer_id] 
     .... 
    else 
     .... 
    end 
    render ..., status: 200 
    end 

私のデザインを改善するために、私はサブリソース用に追加の名前空間を導入しました。だから、特定のマネージャーのためにすべての顧客をリストするために、私はマネージャー名空間の下にカスタマーコントローラーを持っています。顧客リソースに関連するマネージャに固有のすべてのアクションが実行されています。私は別のリソースそれでManager.find(..)ラインを交換するとき

"error":"uninitialized constant Api::V1::Manager::CustomerController::Manager 

今、このエラーを私が受け取る新しいセットアップをテストする場合

Class Api::V1::Manager::CustomerController < Api:ApiBaseController 
    def show 
     Manager.find(params[:id] ... 
     ... 
    render ..., status: 200 
end 

routes.rbをエントリには、この

get 'manager/:manager_id/customer' => 'manager/customer#show' 

のように今見えますもう何もマネージャーリソースにアクセスできないのですか?私はそれが名前空間の名前と関係があると思うが、名前空間の名前を変更しても役に立たなかった。

+0

「マネージャ」はどこに定義されていますか? 'app/models/manager.rb'またはサブフォルダにありますか?また、 'manager'のクラス宣言を提供できますか? –

+0

ねえ、それは 'app/model/manager.rb'で定義されています。クラス宣言の意味は? – theDrifter

+0

ファイルの最初の行は通常 'クラスマネージャ<...' –

答えて

1

::を頭に付ける

::Manager.find(params[:id]) 

を試してみては、ルート名前空間にアクセスします。

+0

ありがとうございます – theDrifter