我有这个简单的脚本来显示文件夹中的所有文件,它在控制台中工作,但在Sinatra中提供了不同的结果(带路径和扩展名)。为什么会这样,我怎样才能在ul列表中最好地呈现这些基本名称(没有路径和扩展名)作为使用Sinatra在浏览器中打开此文件的链接? 目标是在没有给出文件名的情况下提供可点击的页面列表。我已经有了显示文件的例程。
控制台:
require 'find'
def get_files path
dir_array = Array.new
Find.find(path) do |f|
dir_array << f if !File.directory?(f) # add only non-directories
end
return dir_array
end
for filename in get_files 'c:/sinatra_wiki/views'
basename = File.basename(filename, ".*")
puts basename
end
=> index
index2
屈:
require 'find'
def get_files path
dir_array = Array.new
Find.find(path) do |f|
dir_array << f if !File.directory?(f) # add only non-directories
end
return dir_array
end
get '/' do
for filename in get_files 'c:/sinatra_wiki/views'
basename = File.basename(filename, ".*")
puts basename
end
end
=> c:/sinatra_wiki/views/index.htmlc:/sinatra_wiki/views/index2.erb
答案 0 :(得分:4)
在sinatra实现中,您在浏览器中看到的结果不是puts basename
块中get
语句中的结果。它是get_files
方法的返回值。尝试在puts "<p>#{base name}</p>"
块中添加puts basename
而不是get
,然后自行查看。
一些变化:
get_files
方法:不发送整个文件路径,而只发送文件名
dir_array << File.basename(f, ".*")
添加视图以防您需要清晰:
get '/' do
@arr = get_files(the_path)
erb :index
end
在app / views文件夹的其他地方,在index.erb文件中:
<h2>Page list</h2>
<ul>
<% @arr.each do |page| %>
<li><a href="/<%=page%>"><%=page> %></a></li>
<% end %>
</ul>
这是以与控制台输出类似的方式列出文件名。
TL; DR:将循环部分放在视图中!