如何在Rails布局文件中渲染局部视图?
在Rails布局中渲染局部视图的问题解决办法
嘿,我明白你为啥踩这个坑了!Rails查找局部视图的规则在这里耍了点小“小心思”。
当你在layouts/application.html.erb里写<%= render "footer" %>时,Rails的默认搜索逻辑是先找当前请求对应的控制器视图文件夹(比如错误里提到的static文件夹),再去app/views/application文件夹里找,但你的_footer.html.erb是放在app/views/layouts文件夹里的,完全不在它的搜索范围内,所以才抛出了找不到局部视图的错误。
给你两个简单的解决办法:
方法一:指定完整路径
直接在render的时候写明局部视图所在的文件夹,让Rails精准定位到layouts文件夹里的_footer.html.erb:</head> <body> <%= yield %> <%= render "layouts/footer" %> </body> </html>方法二:移动局部视图位置
如果你希望以后调用这个footer局部视图不用每次都写路径,可以把_footer.html.erb移到app/views/application文件夹里,这样原来的<%= render "footer" %>代码就能正常工作了——因为Rails会默认优先搜索application文件夹里的局部视图。
顺便补个小知识点:平时你在普通视图(比如index.html.erb)里渲染同文件夹的局部视图不用写路径,是因为Rails会先在当前视图所在的文件夹里查找,但布局文件所在的layouts文件夹不属于任何一个控制器的视图目录,所以必须明确告诉Rails它的位置才行~
内容的提问来源于stack exchange,提问作者Roger Perez
相关产品推荐
相关产品推荐

