我有一个像这样的视图文件夹:app/views/pages/tests/*
。在该文件夹中有几个子文件夹和一个index.html.slim
。在index.html.slim
文件中,我想自动生成指向所有子文件夹的链接列表。我不确定如何开始,因为我不知道如何从视图文件中获取当前视图的路径。
编辑:
我应该提一下,这些视图文件的提供方式与thinkbot High Voltage gem类似,即app/views/pages/*
中的所有内容都由PagesController提供。如果找不到匹配的路由,我们将获取请求的路由,将其发送到PagesController,并在app/views/pages
目录中提供相应的视图文件。因此http://localhost:3000/tests/a/
会加载app/views/pages/tests/a/index.html.slim
。实际上,PagesController已成为静态文件服务器。
所以在其中一些'静态'目录,我想打印目录内容。我需要找到一种动态的方法来确定当前服务的视图的路径,然后获取该路径中的所有文件以输出它们。
这是一个非常具体的用例,但我想知道是否有任何一般方法可以从视图中确定视图的路径,所以我可以这样做:
ul
- current_view_directory.files.each do |file|
li = link_to file, file.path
答案 0 :(得分:2)
逻辑属于控制器,而不属于视图。
伪代码:
class MyController < ApplicationController
def index
dir = Rails.root.join('app', 'views', 'pages', 'tests').to_s
@subdirs = Dir.glob("#{dir}/**/*").select{|f| File.directory? f}
end
您的编辑描述了想要从同一个控制器提供各种静态页面。
伪代码:
class PagesController < ApplicationController
def show
static_page_key = params[…] # edit this line to work with your routing
dir = Rails.root.join('app', 'views', 'pages', static_page_key).to_s
@subdirs = Dir.glob("#{dir}/**/*").select{|f| File.directory? f}
end