2012-04-27 3 views
0

이 간단한 스크립트를 사용하여 폴더에있는 모든 파일을 표시하지만 콘솔에서 작동하지만 Sinatra에서 다른 결과를 제공합니다 (경로 및 확장자 포함). 왜 그런가요? Sinatra를 사용하여 브라우저에서이 파일을 여는 링크로 ul 목록에이 기본 이름 (경로 및 확장자 없음)을 가장 잘 표시하려면 어떻게해야합니까? 목표는 파일 이름이 제공되지 않으면 클릭 가능한 페이지 목록을 제시하는 것입니다. 나는 이미 파일을 보여줄 루틴을 가지고있다.Ruby 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

, 브라우저에서 볼 수있는 결과는 get 블록의 puts basename 문에서 아니다. 이것은 get_files 메서드의 반환 값입니다. get 블록에 puts basename 대신 puts "<p>#{base name}</p>"을 추가하고 직접 확인해보십시오.

일부 변경 :

get_files 방법 :

get '/' do 
    @arr = get_files(the_path) 
    erb :index 
end 
대신 전체 파일 경로를 보내는, 당신은 명확하게해야 할 경우 뷰를 추가 파일 이름 만

dir_array << File.basename(f, ".*") 

을 보내

, app/views 폴더의 index.erb 파일 :

<h2>Page list</h2> 

<ul> 
    <% @arr.each do |page| %> 
    <li><a href="/<%=page%>"><%=page> %></a></li> 
    <% end %> 
</ul> 

콘솔 출력과 비슷한 방식으로 파일 이름을 나열합니다.

TL; DR : 반복 부분을보기에 넣으십시오!

+0

감사합니다.하지만 지금은 브라우저에 빈 ul이 표시되고 오류가 발생하지 않습니다. @arr의 내용이 index.erb에 무엇인지 어떻게 알 수 있습니까? 출력을 콘솔에도 보낼 수 있습니까? – peter

+0

nevermind, 찾았습니다. 대답을 편집 할게요 – peter

+0

글쎄, 실수 였어? 그것은 나를 도울 것입니다 :) – Kashyap