【发布时间】:2018-10-11 17:51:49
【问题描述】:
我的 Sinatra 应用程序中有三个控制器:基本的 ApplicationController,以及一个 AuthorsController 和 BooksController,它们都继承自 ApplicationController。
我的视图文件结构是:
|-views
| |
| books/
| |
| authors/
| |
| home.erb
我在 BooksController 的顶部设置了带有 set :views, "app/views/books" 的 Books 的 views 文件夹,而 Authors 类似;两者都有效。
ApplicationController 只定义了一个路由:
class ApplicationController < Sinatra::Base
set :views, "app/views"
get "/" do
erb :home
end
end
当我转到“/”时,它会在 Books 文件夹或 Authors Controller 中查找主视图,具体取决于我的 config.ru 文件中的第一个:
require_relative './config/environment'
use BooksController
use AuthorsController
run ApplicationController
注释掉其他控制器(或只是其中的set :views 行)使“/”路由按预期工作。我的代码肯定是在正确的控制器上使用正确的方法;它只是在错误的地方寻找风景。
【问题讨论】:
-
你为什么从
ApplicationController而不是Sinatra::Base派生其他控制器?您要向所有控制器添加什么? -
@Sara 不多:基本上只是一个
method_override: true。我曾认为为整个应用程序设置一个父控制器是有意义的,但现在我发现我错了。