2016-11-10 17 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/

のようなブログ投稿をチェックアウトしてください
関連する問題