我正在尝试构建一个像方形空间一样的演示应用。我有一个预览页面,其中iframe加载了所选的模板。所以我决定不需要默认布局(application.html.erb)。我在视图中创建了一个名为Design1的新文件夹,在其中创建了另一个名为partials的文件夹。我在里面制作了_header.html.erb。我在Design1文件夹中创建了另一个名为home.blade.php的文件,并尝试包含' layouts / header'在它,它给了我这个错误
Missing partial Design1/_header with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in: * "/usr/share/nginx/html/fuitter-test/app/views"
这就是我在home.html.erb中呈现头文件的方式
<%= render 'layouts/header' %>
我的forlder structuer
views
-Design1
-layouts
- _header.html.erb
-home.html.erb
-other folders
我也做过
layout false
控制器中的
答案 0 :(得分:3)
首先 - 文件名上的始终小写!永远不要使用设计或 MyCoolStory ,在rails中我们使用约定优于配置,这意味着 snake_case ,这是所有下载和用 _under_scores
分隔您的渲染问题: 有一个很棒的文档,您可以找到所需的任何内容:http://guides.rubyonrails.org/layouts_and_rendering.html
让我帮你一点。
Rails正在寻找布局。默认情况下,它会在 /app/views/layouts/application.html.erb 中出现(将其命名为应用程序没有任何问题)。布局是您需要的整个HTML框架。在布局中,(应该)始终是yield
块。
rails中的YieldBlock是渲染模板的地方。
所以基本上布局文件看起来像这样(我使用haml来更容易阅读)
%html
%head
=render "shared/head"
%body
.wrapper
%nav.navigation=render "shared/navigation"
.main_content
=yield
%footer.foot=render "shared/footer"
这意味着您在 / app / views / shared 中有3个部分模板,名为 _head.html.erb , _navigation.html.erb 和 _footer.html.erb
这就是轨道方式。
更多信息
如果您打算使用多设计应用,则应该总体构建视图,如
并在控制器中设置查找路径,如下所示
prepend_view_path "#{Rails.root}/app/views/#{design_path}"
def design_path
current_page.design_name
end
到那时,所有视图都将被查找到他们指定的文件夹(Spree multi_store引擎,这样做就是这样,例如)
答案 1 :(得分:1)
您将layouts
文件夹放在Design1
文件夹中,因此您应该使用以下路径来呈现您的布局:
<%= render 'Design1/layouts/header' %>
答案 2 :(得分:1)
渲染结构应该从/views
文件夹开始。
<%= render 'Design1/layouts/header' %>