Ruby Sinatra:显示可点击的文件列表

时间:2012-04-27 09:34:14

标签: ruby sinatra

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

1 个答案:

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