Ruby on rails 为什么我从子目录中获取缺少的模板?

Ruby on rails 为什么我从子目录中获取缺少的模板?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我的视图/patients/show.html.slim == render 'era/header' 当然,views/patients/era/_header.html.slim存在,尽管它抛出了一个缺少模板的错误: ActionView::MissingTemplate at /patients/12345 Missing partial era/header with {:locale=>[:en], :formats=>[:html], :handlers=>[:e

我的
视图/patients/show.html.slim

== render 'era/header'
当然,
views/patients/era/_header.html.slim
存在,尽管它抛出了一个缺少模板的错误:

ActionView::MissingTemplate at /patients/12345
Missing partial era/header with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :slim, :haml]}. 
Searched in: * "/home/pablo/code/rails/tarjira/app/views"
如果我使用
==render'patients/era/header'
工作,则与
==render'era\u header'
相同(假设我有一个
视图/patients/\u era\u header.html.slim
文件)。后者使我认为rails搜索实际目录(
views/patients
),因此我不明白为什么在第一种情况下我必须以
patients/
作为前缀


我使用的是Rails 4.0.4。

要将部分渲染为视图的一部分,请在视图中使用
渲染方法:

== render 'era_header'
这将在正在渲染的视图中的该点渲染名为
\u era\u header.html.slim
的文件

== render 'era/header'
此代码将从
app/views/era/_header.html.slim
中提取部分。注意Rails是如何形成路径的,即通过在
render
方法调用中的给定路径前面加前缀
app/views
,即
era/header
。这就是如何在Rails中实现
render
方法


阅读Rails指南中关于

的说明,我理解这一点。我可以从文件中推断出来。但是,为什么在调用
渲染“部分”
时,在
视图/患者
目录中使用例如
\u partial.html.slim
?。它确实查找
views/patients/_partial.html.slim
,而不是
views/_partial.html.slim
。Rails就是这样按照文档编码
render
方法的。如果你想挖掘更多,这里是的源代码。谢谢你的回答,现在你带我找到了我理解的源代码。这就引出了另一个相关的问题。如果我使用
==render'patients/era/header'
,这意味着如果我在后者内部调用分部,我还必须使用完整路径。这让我觉得我做错了什么,Rails它不是用来使用子目录和从那里调用partials的。我是否使用了错误的方法?这取决于用例。最可能的情况是,您使用嵌套目录结构在应用程序中保持更清晰的层次结构,但在这种情况下,Rails希望您显式指定路径。Yep。这就是为什么。尽管如此,我还是觉得很奇怪。也许我应该尝试更多地使用布局和嵌套布局。再次感谢。