Неопределенный метод для nil: NilClass - PullRequest
0 голосов
/ 01 апреля 2011

Мое приложение, похоже, случайно выдает ошибку "undefined method 'address_line_1' for nil:NilClass", когда пользователи пытаются получить доступ к странице своего профиля.

Что странно, так это то, что ошибка возникает в совершенно не связанном представлении макета, и я не вижу никаких признаков того, что макет даже вызывается (поскольку он не имеет ничего общего с представлением редактирования).

GET peoplecontacter.heroku.com/pages/5/edit dyno=web.1 queue=0 wait=0ms service=20ms bytes=934
2011-03-31T15:19:47-07:00 app[web.1]: 
2011-03-31T15:19:47-07:00 app[web.1]: ActionView::Template::Error (undefined method `address_line_1' for nil:NilClass):
2011-03-31T15:19:47-07:00 app[web.1]:     44:     #{@page_content.address_line_1}
2011-03-31T15:19:47-07:00 app[web.1]:   app/views/layouts/pages/page_splitheader.html.haml:44:in `_app_views_layouts_pages_page__splitheaderhtml_haml___1138718096_23705833586020_0'

Иногда возникает ошибка, нажимаю ли я на учетную запись из предыдущего представления customer_account или просто щелкаю по представлению страницы на странице и нажимаю кнопку «Назад» браузера, возвращаясь к представлению редактирования. Но я не получаю ошибку на шоу, которое является единственным местом, где @page_content.address_line_1 должен исполниться.

Заранее спасибо за любую помощь! --Mark

Ответы [ 2 ]

0 голосов
/ 02 апреля 2011

Ладно, совершенно случайно, и я до сих пор не знаю, в чем причина проблемы, но исправление заключалось в том, чтобы явно установить макет для действия редактирования, чтобы он использовал макет по умолчанию, вместо того, чтобы использовать макет, который я указал для показа действий. Я понятия не имею, почему при переходе с другого контроллера или со страницы показа на страницу редактирования он пытается использовать динамический макет, который я использую только для страницы показа.

В верхней части моего контроллера страниц у меня есть это: before_filter: load_page,: only =>: show def load_page @page = Page.get_page (params) self.class.layout (@ page.template) конец, который я думал это был правильный способ назначить динамический макет для действия, но так как он не работает без использования (что я считаю) хакерского решения, возможно, это не так ...

0 голосов
/ 01 апреля 2011

Если find_all не возвращает ни одной страницы, он возвращает нулевое значение.Кажется, вы не проверяете это.Поэтому, когда возвращается nil, вы получаете ошибку метода nil.

Вы должны обработать такие случаи в вашей программе и представить ошибку пользователю или выполнить некоторую обработку, если это произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...