2016-11-10 61 views
0

我想實現一個管理面板,我認爲這將是很好的鏈接到屏幕左側的不同標籤,並使用AJAX在屏幕右側顯示這些標籤。嵌套命名空間和缺少模板

我決定:admin命名空間去我的模型資源的範圍內(因爲我需要:id),所以我在router.rb做:

resources :my_model do 
    namespace :admin do 
     get "panel", to: "panel#index" #The route to display the main admin panel view 
     # for now let just assume I have one tab: 
     namespace :info_tab do 
      get "index", to: "info_tab#index" 
     end 
    end 
end 
在我的控制器中的文件

然後,我有這樣的一個層次:

controllers/admin/info_tab/info_tab_controller.rb

在這個文件中我寫的(這我不知道如果我這樣做是正確的)

class Admin::InfoTab::InfoTabController < ApplicationController 
    def index 
     logger.debug("Index from info_tab_controller loaded!") 
     respond_to do |format| 
      format.js 
     end 
    end 
end 

我實現了remote: true連結此選項卡後,我點擊它來自控制器的方法被執行,但在我的服務器日誌中我得到這個:

Started GET "/my_model/1/admin/info_tab/index" for ::1 at 2016-11-10 22:33:55 +0100 
Processing by Admin::InfoTab::InfoTabController#index as JS 
No template found for Admin::InfoTab::InfoTabController#index, rendering head :no_content 
Completed 204 No Content in 69ms (ActiveRecord: 0.4ms) 

InfoTabController我的索引視圖根據地方:

views/admin/info_tab/index.js.erb 
  1. 我做了什麼錯?

  2. 這種方法我試圖做對嗎?還是有更好的方法來構建它? (特別是路由)

回答

0

Rails的查找視圖的路徑基於類似

/app/views/{namespace1}/{namespace2}/{controller}/{action}

,所以我會假設你需要的視圖路徑是

app/views/admin/info_tab/info_tab/index.*

除非您預計有許多不同的InfoTab控制器(例如幾十個),否則我還會建議您移動InfoTab命名空間,所以你的控制器是: Admin::InfoTabController < ApplicationController在這種情況下,你當前的視圖路徑應該工作。

如果你想了解更多關於軌道如何查看視圖路徑的信息,我會檢查一個博客帖子,如https://climber2002.github.io/blog/2015/04/06/digging-rails-how-rails-finds-your-templates-part-4/