NoMethodError в / user / profile - неопределенный метод `update 'для nil: NilClass - приложение Sinatra, использующее DataMapper - PullRequest
2 голосов
/ 01 апреля 2011

Привет Я получаю ошибки вращения с приложением Sinatra. Я использую DataMapper 1.1 и Ruby 1.9.2-p136. Я искал и взломал до того, как искать помощь здесь.

Вещи, которые я допрашивал / пробовал: Как создается новый пользователь, если DataMapper #update не создает новую запись, если она не существует? Поэтому я попытался first_or_create, который не решил проблему. Это когда я добавил, если не создавать. Я отлаживал это в течение 3 дней, и я определенно открыт для рефакторинга. На самом деле я обязательно сделаю рефакторинг, однако сначала я хочу решить эту проблему, чтобы учиться на ошибках. В частности, я не хочу использовать коды «разве что» и чувствую, что есть намного лучший способ написания раздела / after_login.

Я был в лагере irc #datamapper #sinatra #ruby - хотя делались большие попытки, но пока не повезло.

Наконец, оригинальный код работал с DataMapper 0.9, что заставило меня думать, что это проблема с DM, однако теперь я думаю, что это может быть не так.

Любая помощь очень ценится!

г:

мерзавец: //gist.github.com/897342.git - файл приложения ruby ​​- добавлен файл create (я чувствую, что у него много проблем)

мерзавец: //gist.github.com/895532.git - файл приложения ruby ​​- перед взломанной попыткой добавить вызов создания

мерзавец: //gist.github.com/895394.git - файл user.rb

мерзавец: //gist.github.com/895391.git - ошибка возврата

=== Обновление: После многих часов суеты кода и тому подобного и огромной помощи от irc групп #datamapper #sinatra и #ruby !! спасибо всем что особенно помог Dkubb! Я наполовину рад сообщить, что я очистил ошибки NoMethodErrors и теперь перехожу к некоторым другим проблемам, главным образом зная, что именно делает весь мой код, более тщательное тестирование и общий общий рефакторинг.

Я буду продолжать обновлять это для тех, кто заинтересован.

Основным решением было разделить мои методы и классы, чтобы я знал, что вызывается, почему и как. В частности, @user вызывал немало проблем. Так что ошибка Синатры была правдивой. ; -)

...