2016-09-10 128 views
0

我有一個manager和一個customer控制器。 當我想列出特定經理的所有客戶時,我曾經通過經理show採取行動(因爲這是經理特有的)。所以if一個customer_id被發現會產生一個不同的返回值。但是,如果分支機構留給我們(有時很大)。在rails中嵌套命名空間錯誤訪問與命名空間名稱相同的模型

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

爲了改進我的設計,我爲子資源引入了額外的名稱空間。所以要列出一個特定經理的所有客戶,我在經理名字空間下有一個客戶控制員。有關與客戶資源相關的經理的所有操作都將進行。

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' 

在測試新的設置我現在收到此錯誤

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

當我替換爲其他資源的Manager.find(..)就行正在工作,爲什麼我無法再訪問管理器資源?我認爲它與名稱空間的名稱有關,但即使重命名名稱空間也沒有幫助。

+0

'經理'定義在哪裏?在'app/models/manager.rb'還是在一個子文件夾中?另外,你能否提供'manager'的類聲明? –

+0

嘿,是的,它定義在'app/model/manager.rb'中。類聲明是什麼意思? – theDrifter

+0

該文件的第一行通常是'class Manager <...' –

回答

1

嘗試

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

::加前綴將訪問根命名空間。

+0

是的,謝謝你的作品 – theDrifter

相關問題