Model view controller Sinatra模型访问根视图文件夹

Model view controller Sinatra模型访问根视图文件夹,model-view-controller,views,sinatra,models,controllers,Model View Controller,Views,Sinatra,Models,Controllers,我一直在想如何让我的模型访问sinatra中的根视图文件夹 文件结构 config.ru app.rb models/ song.rb views/ song/ song.slim edit_song.slim layout.slim login.slim 当我通过song.rb查看“/song”路由时,控制器告诉它渲染song.slim视图。但是,当我这样做时,它最终会查找app/models/views/song/song.slim,而不是我想要的app/v

我一直在想如何让我的模型访问sinatra中的根视图文件夹

文件结构

config.ru
app.rb
models/
  song.rb
views/
  song/
    song.slim
    edit_song.slim
  layout.slim
  login.slim

当我通过song.rb查看“/song”路由时,控制器告诉它渲染song.slim视图。但是,当我这样做时,它最终会查找app/models/views/song/song.slim,而不是我想要的app/views/song/song.slim。

您可以在视图所在的位置进行显式配置

:视图-视图模板目录 指定视图模板所在目录的字符串。通过 默认情况下,假定该目录位于 应用程序的根目录(请参阅:root设置)。最好的方法 在目录的根目录中指定替代目录名 应用程序将使用引用:根的延迟值 设置:

例子 只需将其添加到您的配置方法中

根据你的例子 它应该是
set:views,Proc.new{File.join(root,../views”)}
来自您的模型。并使用
slim:“song/song”
slim:“song/edit_song”


不确定,但如果您的路由逻辑在app.rb中,您可以跳过设置视图文件夹的部分。

您可以配置视图所在的显式位置

:视图-视图模板目录 指定视图模板所在目录的字符串。通过 默认情况下,假定该目录位于 应用程序的根目录(请参阅:root设置)。最好的方法 在目录的根目录中指定替代目录名 应用程序将使用引用:根的延迟值 设置:

例子 只需将其添加到您的配置方法中

根据你的例子 它应该是
set:views,Proc.new{File.join(root,../views”)}
来自您的模型。并使用
slim:“song/song”
slim:“song/edit_song”


不确定,但是如果你的路由逻辑在app.rb中,你可以跳过设置视图文件夹的部分。

我已经尝试过了,但它不起作用。我正在尝试从models/song.rb文件夹访问views/songs/*.slim中的视图,因此在我的根目录中有app/models和app/viewsIt。如果您能提供一个更好的文件夹和文件结构示例,这将非常有帮助。好的,经过一个晚上的良好睡眠和清醒的头脑,我尝试了Sir Script在他的答案中添加的内容。我以前认为,我不知道我应该从模型内部设置视图,但现在这是有意义的。我把它放在主应用程序文件中。我试过了,但没用。我正在尝试从models/song.rb文件夹访问views/songs/*.slim中的视图,因此在我的根目录中有app/models和app/viewsIt。如果您能提供一个更好的文件夹和文件结构示例,这将非常有帮助。好的,经过一个晚上的良好睡眠和清醒的头脑,我尝试了Sir Script在他的答案中添加的内容。我以前认为,我不知道我应该从模型内部设置视图,但现在这是有意义的。我把它放在主应用程序文件中。
set :views, Proc.new { File.join(root, "../views") }