2015-10-05 164 views
0

我正在尝试构建一个像方形空间的演示应用程序。我有一个预览页面,其中一个iframe加载所选模板。所以我决定,我不会需要默认布局(application.html.erb)。我在视图中创建了一个名为Design1的新文件夹,并在里面创建了另一个名为partials的文件夹。我在里面创建了_header.html.erb。我创建了一个叫做home.blade.php的设计1文件夹内的另一个文件,并试图以包括它的“布局/头”,这让我这个犯错在rails中渲染局部布局

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" 

这是我如何渲染家里头文件.html.erb

<%= render 'layouts/header' %> 

我forlder structuer

views 
    -Design1 
    -layouts 
     - _header.html.erb 
    -home.html.erb 
    -other folders 

而且我也做

layout false 

控制器

+0

请显示部分呈现代码。 – Zahid

+0

可能'''Design1'''必须包含到'''render'''的参数中吗? '''<%= render'Design1/layouts/header'%>''' –

+0

看到我的答案,底部路径。如果你真的想去/ Design1 /你需要预先安装view_paths –

回答

2

首先 - 总是 downcase上的文件名!切勿使用设计MyCoolStory,在轨我们用约定优于配置这意味着snake_case这是everytihng downcased与_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" 

,这意味着你有在/应用/视图3部分模板/共享命名_head .html.erb_navigation.html.erb_footer.html.erb

这就是轨道的方式。


Furter信息

如果你计划有一个多设计的应用程序,你应该结构总您的观点一样

  • /应用/视图/设计1
  • /app/views/design2
  • /app/views/design3
  • /应用/视图/共享

,并设置查找路径在控制器这样

prepend_view_path "#{Rails.root}/app/views/#{design_path}" 
def design_path 
    current_page.design_name 
end 

届时,所有的意见都会被查找到他们指定的文件夹(施普雷multi_store ENGINGE,是做像这样,举例)

0

你把你的layouts文件夹中的文件夹Design1,因此,你应该使用以下路径以使您的布局:

<%= render 'Design1/layouts/header' %> 
1

渲染结构应该从/views文件夹中开始。

<%= render 'Design1/layouts/header' %>