LINUX.ORG.RU

NoMethodError в Sinatra

 ,


0

1

Разбираюсь с синатра. Столкнулся с проблемой. При переходе на роут:

get '/songs/:id' do
  @song = Song.get(params[:id])
  slim :show_song
end

во вьюхе show_song.slim следующий код:

h1= @song.title

класс Song таков:

class Song
  include DataMapper::Resource
  property :id, Serial
  property :title, String
  property :lyrics, Text
  property :length, Integer
  property :released_on, Date
end

В итоге выдается ошибка: NoMethodError - undefined method `title' for nil:NilClass: ... бла-бла-бла по тексту.

Понимаю что инстансная переменная криво передается, но вот понять не могу что делать. Пробовал в руби 1.9 и 2.0 - одно и тоже. Может кто-то сталкивался? Куда копать?

И еще вопрос, кроме первого (указанного выше) роута, существует еще один:

get '/songs' do
  @songs = Song.all
  slim :songs
end
так вот, он нормально цепляет цсс:
USERULT-7C6EKSC - - [19/Apr/2014:15:03:24] "GET /songs HTTP/1.1" 200 551 - -> /songs ::1 - - [19/Apr/2014 15:03:24] "GET /styles.css HTTP/1.1" 200 661 0.0090
USERULT-7C6EKSC - - [19/Apr/2014:15:03:24] "GET /styles.css HTTP/1.1" 200 661
http://localhost:4567/songs -> /styles.css

а первый пытается зацепить этот цсс из подпапки:

USERULT-7C6EKSC - - [19/Apr/2014:15:02:06] "GET /songs/1 HTTP/1.1" 200 402
http://localhost:4567/songs -> /songs/1
::1 - - [19/Apr/2014 15:02:07] "GET /songs/styles.css HTTP/1.1" 200 402 0.0200
USERULT-7C6EKSC - - [19/Apr/2014:15:02:07] "GET /songs/styles.css HTTP/1.1" 200 402
http://localhost:4567/songs/1 -> /songs/styles.css
и не цепляется. Как это починить, а то совсем направление движения понять не могу

Стесняюсь спросить: а Song с айди 1 точно существует?

Apple-ch ★★ ()
Ответ на: комментарий от Apple-ch

Да. Все существует. Из лога даже видно что он с 200 отдается. Проблема оказалась в неточном синтаксисе в книге. Решил методом научного тыка в очевидные точки. Вопрос с цсс тоже решился нестандартно. Так что могу сказать что Jump Start Sinatra содержит мелкие, но досадные ошибки которые весьма тормозят процесс изучения.

kinelak ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.