Rails 5.2脚手架生成控制器无法渲染new视图问题求助
解决控制器无法渲染视图的问题
嘿,这个问题明显是Event.new在搞鬼!你贴的日志只显示了Admin的查询,但实际上执行Event.new时,大概率触发了模型层面的异常,直接导致请求中断,根本没走到渲染视图的环节。
给你几个具体的排查步骤,按顺序来就行:
- 先在控制台测试
Event.new:打开Rails控制台(执行rails c),直接输入Event.new回车,看看会不会报错。如果控制台里直接抛出异常,那问题肯定出在Event模型里,和控制器没关系。比如模型里的before_initialize回调写错了,或者某个属性的默认值逻辑有问题,都会导致初始化实例失败。 - 检查Event模型的回调方法:翻一下Event模型的代码,看看有没有
before_initialize、after_initialize这类初始化相关的回调,这些方法里很容易出现引用不存在的变量、调用未定义方法的情况,一执行就炸。 - 排查视图代码:虽然移除
@event后视图能正常渲染,但说不定视图里有依赖@event的代码,比如访问某个关联属性@event.category.name,但@event.category是nil,或者关联关系没设置对,导致访问时出错。你可以先把视图里所有用到@event的代码注释掉,再把@event = Event.new加回去,如果能渲染了,就逐行恢复视图代码,找到哪一行触发了错误。 - 找完整的错误日志:你贴的日志只到Admin查询那一步,后面肯定还有内容,比如
Completed 500 Internal Server Error以及具体的异常栈信息,那里面会明确告诉你哪里错了,这是最有效的排查线索。
还有个小概率情况:如果你的Event模型有自定义的属性getter方法,比如def name; some_complex_logic; end,那这个方法里的错误也会在初始化实例后,视图访问属性时触发。
内容的提问来源于stack exchange,提问作者beauraF
相关产品推荐
相关产品推荐

