2013-06-06 6 views
3

Я создаю приложение Sinatra, которое загружает CSV-файл и помещает его содержимое в хэш. Когда я ссылаться на этот хэш в моем app.rb так:Sinatra: неопределенный метод bytesize для Hash

hash = extract_values(path_to_filename)

я получаю сообщение об ошибке:

неопределенный метод `bytesize» для Hash: 0x007fc5e28f2b90 #object_id

file: utils.rb location: bytesize line: 335

Я где-то читал, что это проблема Webrick. Я переключился на Тин, ошибка такая же.

My hash/CSV-файл имеет очень маленький размер, поэтому это не может быть проблемой.

Я использую ruby ​​1.9.3p374.

Спасибо!

+0

Если я не так, метод bytesize предназначен только для строки. Вы уверены, что передаете правильный аргумент? –

+4

Если бы вы могли предоставить немного больше кода, это было бы очень полезно. Я предполагаю, что 'hash = ...' является последним выражением в маршруте Sinatra, но я предполагаю, и это проблема с этой проблемой! – iain

+0

Вы не дали нам достаточно информации, и все, что мы говорим сейчас, - это только спекуляция. Нам нужен образец CSV вместе с кодом, который дублирует проблему, прежде чем мы сможем дать вам разумный ответ. Основываясь на опыте, я сомневаюсь, что Sinatra, Webrick, Thin или CSV являются проблемой, и вместо этого это скорее всего в 'extract_values ​​()'. Как есть, это не вопрос, потому что он неопределенный и неполный. –

ответ

9

Это выглядит как дубликат Undefined method `bytesize' for #<Hash>

Синатра ожидает строку возвращается (т.е. последняя строка) метода маршрута; вы не можете просто вернуть прямой хэш.

+0

Спасибо, это действительно проблема. Я не знал, что нужно вернуть строку на трассе Синатра. Я попытался изменить это, возвращая nil (никогда не хорошая стратегия) и повторяя хэш в app.rb. Теперь я знаю, что нужно передать коллекцию шаблону представления и перебрать по ней один вид. – abbottjam

+0

Рад, что вы решили проблему, прислушиваясь к публикации вашего решения тоже :) –

2

Решено:

1) передать коллекцию в целях:

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]} 

 Смежные вопросы

  • Нет связанных вопросов^_^