0

"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应该执行的地方。

提前感谢您的帮助! - 标记

4

2 回答 2

0

如果 find_all 没有返回任何页面,它将返回一个 nil 值。看来你没有检查。因此,当返回 nil 时,您会收到 nil 方法错误。

您必须在程序中处理此类情况并向用户显示错误或在发生这种情况时进行一些处理。

于 2011-03-31T23:15:50.553 回答
0

好的,完全随机的,我仍然不知道问题的原因是什么,但修复是显式设置编辑操作的布局,以便它使用默认布局,而不是使用我指定的布局显示动作。我不知道为什么,当来自另一个控制器或从显示页面返回到编辑页面时,它试图使用我仅用于显示页面的动态布局。

在我的页面控制器的顶部,我有这个: before_filter :load_page, :only => :show def load_page @page = Page.get_page(params) self.class.layout(@page.template) end 我认为那是为动作分配动态布局的正确方法,但由于不使用(我认为)一个hacky解决方案就无法工作,也许它不是......

于 2011-04-02T14:44:30.137 回答