Rails访问特定活动评论页出现undefined method `each' for nil报错
错误根因
你在Reviews控制器的index方法中写错了变量名,导致视图读取的评论列表变量为空:
- 当访问
events/:id/reviews路径时,控制器会命中@event = Event.find_by_id(params[:event_id])的分支,你将该活动的评论集合赋值给了@events变量,但reviews/index.html.erb视图中必然是用@reviews变量来遍历渲染评论列表,此时@reviews为nil,调用each方法就会抛出你遇到的报错。
修复方案
修改app/controllers/reviews_controller.rb中的index方法:
def index if @event = Event.find_by_id(params[:event_id]) # 修正变量名,把@events改为@reviews,和视图使用的变量对应 @reviews = @event.reviews else @reviews = Review.all end end
可选补充修复
你的new方法也存在逻辑错误,会导致后续新建评论功能异常,建议同步修改:
def new if @event = Event.find_by_id(params[:event_id]) # 原代码错误覆盖了@event变量,改为赋值给@review @review = @event.reviews.build else @review = Review.new end end
修改完成后重启Rails服务,重新测试跳转评论列表的功能即可恢复正常。
内容的提问来源于stack exchange,提问作者prstsb
相关产品推荐
相关产品推荐

