嵌套命名空间和缺少模板

时间:2016-11-10 21:47:04

标签: ruby-on-rails

我正在尝试实现一个管理面板,我认为将链接指向屏幕左侧的不同选项卡并使用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. 这种做法我想做对吗?或者有更好的方法来构建它吗? (特别是路线)

1 个答案:

答案 0 :(得分:0)

Rails根据类似

的内容查找视图路径

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

所以我假设您需要视图路径

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

除非您预计会有许多不同的InfoTab控制器(例如,几十个),否则我还建议您删除InfoTab命名空间,因此您的控制器是: Admin::InfoTabController < ApplicationController在这种情况下,您当前的视图路径应该正常工作。

如果您想了解有关rails如何查看视图路径的更多信息,请查看像https://climber2002.github.io/blog/2015/04/06/digging-rails-how-rails-finds-your-templates-part-4/

这样的博客文章