0

フォルダー内のすべてのファイルを表示するこの単純なスクリプトがあります。コンソールでは機能しますが、Sinatra では異なる結果が得られます (パスと拡張子を使用)。Sinatra を使用してブラウザーでこのファイルを開くためのリンクとして、これらのベース名 (パスと拡張子なし) を ul リストに表示するにはどうすればよいですか? 目標は、ファイル名が指定されていない場合に開くページのクリック可能なリストを提示することです。私はすでにファイルを表示するルーチンを持っています。

コンソール:

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 に答える