当用户尝试访问他们的个人资料页面时,我的应用似乎会随机抛出"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
答案 0 :(得分:0)
如果find_all没有返回任何页面,它将返回一个nil值。看来你没有检查。因此,当返回nil时,会出现nil方法错误。
您必须在程序中处理此类情况并向用户显示错误或在发生这种情况时进行一些处理。
答案 1 :(得分:0)
好的,完全随机,我仍然不知道问题的原因是什么,但修复是明确设置编辑操作的布局,以便它使用默认布局而不是使用我为show动作指定的布局。我不知道为什么,当来自另一个控制器,或从显示页面返回到编辑页面时,它正试图使用我仅用于显示页面的动态布局。
在我的Pages控制器的顶部,我有:before_filter:load_page,:only => :show def load_page @page = Page.get_page(params)self.class.layout(@ page.template)end我认为这是为动作分配动态布局的正确方法,但是因为它不使用而没有使用(什么我认为这是一个hacky解决方案,也许不是......