0

我有这个简单的脚本来显示文件夹中的所有文件,它在控制台中工作,但在 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
4

1 回答 1

4

在您的 sinatra 实现中,您在浏览器中看到的结果不是块中puts basename语句的结果get。它是方法的返回值get_files。尝试在块中添加puts "<p>#{base name}</p>"而不是添加并亲自查看。puts basenameget

一些变化:

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:将循环部分放在视图中!

于 2012-04-27T10:18:27.907 回答