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
и не цепляется. Как это починить, а то совсем направление движения понять не могу



Последнее исправление: kinelak (всего исправлений: 2)

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

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

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