在rails中渲染部分布局

时间:2015-10-05 03:46:26

标签: ruby-on-rails ruby

我正在尝试构建一个像方形空间一样的演示应用。我有一个预览页面,其中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
控制器中的

3 个答案:

答案 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

这就是轨道方式。

更多信息

如果您打算使用多设计应用,则应该总体构建视图,如

  • /应用/视图/设计1
  • /应用/视图/设计2
  • /应用/视图/ design3
  • /应用/视图/共享

并在控制器中设置查找路径,如下所示

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' %>