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。这就是为什么。尽管如此,我还是觉得很奇怪。也许我应该尝试更多地使用布局和嵌套布局。再次感谢。