2013-06-06 3 views
3

업로드 된 CSV 파일을 가져 와서 내용을 해시에 넣는 Sinatra 앱을 만들고 있습니다. 내가 지금처럼 내 app.rb이 해시를 참조 할 때 : 해시에 대한Sinatra : 해시 용으로 정의되지 않은 바이트 크기

정의되지 않은 메서드`bytesize ': 0x007fc5e28f2b90이

을 #object_id

hash = extract_values(path_to_filename)

이 오류 메시지가 계속 파일 : utils.rb 위치 : 바이트 크기 줄 : 335

나는 이것이 Webrick 문제인 곳을 읽었습니다. 나는 Thin으로 전환했다. 오류는 동일하다.

내 해시/CSV 파일 크기가 매우 작기 때문에 문제가 될 수 없습니다.

저는 루비 1.9.3p374를 사용하고 있습니다.

감사합니다.

+0

나는 경우

1)을보기로 컬렉션을 전달합니다 잘못하지 않았다면 bytesize 메서드는 문자열에만 해당됩니다. 올바른 arg를 전달하고 있습니까? –

+4

조금 더 많은 코드를 제공 할 수 있다면 매우 유용 할 것입니다. 나는 'hash = ...'가 Sinatra 경로의 마지막 표현이라고 추측하고 있습니다.하지만이 문제에 대한 문제입니다. – iain

+0

당신은 우리에게 거의 충분한 정보를주지 않았고 우리가 지금 말하고있는 것은 단지 추측 일뿐입니다. 우리는 합리적인 대답을 줄 수 있기 전에 문제를 복제하는 코드와 함께 CSV 샘플을 필요로합니다. 경험에 비추어 볼 때, Sinatra, Webrick, Thin 또는 CSV는 문제가 아니며 대신'extract_values ​​()'에 가장 많이 사용됩니다. 이는 모호하고 불완전하기 때문에 실제 질문은 아닙니다. –

답변

9

Undefined method `bytesize' for #<Hash>의 중복처럼 보이는

시나 문자열을 기대하고있다

는 경로 방법 (즉, 마지막 줄) 반환 ; 당신은 그냥 똑바로 해쉬를 반환 할 수 없습니다.

+0

정말 고맙습니다. 나는 Sinatra 루트에서 문자열을 반환해야한다는 것을 몰랐습니다. 나는 이것을 return nil (절대로 좋은 전략)에 의해 변경하려고 시도하고 app.rb의 해시를 반복했다. 이제 뷰 템플릿에 컬렉션을 전달하고 뷰를 반복하여 뷰를 반복해야한다는 것을 알고 있습니다. – abbottjam

+0

다행히 문제를 해결해 주셨습니다. 솔루션 게시시에도 기쁩니다. :) –

2

는 해결 :

get '/file/:filename' do 
    filename = params[:filename] 
    @rows = extract_values(testfile_path(filename)) 
    haml :search_term 
end 

2) ERB/​​HAML (뷰 템플릿에 반복) :

%ul 
- @rows.each do |hash| 
    %li 
    Id: #{hash[:id]}, Keyword: #{hash[:keyword]}, Searches: #{hash[:searches]}