2010-10-06 81 views
0

我正试图在此刻设计我的红宝石Rails应用程序。我创建了视图/布局/ posts.html.erb,这些都是我的PostsController的视图。我以为views/layouts/application.html.erb是为了适用于所有布局?

我想添加一个始终位于页面顶部的主要栏,而不管用户正在看什么视图。我认为这是views/layouts/application.html.erb的目的。

这似乎同意我: http://jacqueschirag.wordpress.com/2007/08/02/rails-layout-and-nested-layout-basics/

  • 整个Rails应用程序(所有控制器的所有视图)将 使用此布局:

    views/layouts/application.rhtml

  • 所有单个控制器内的视图将使用此布局。例如, 示例,weelome_controller.rb的 的布局将使用此 布局。请注意,在“_controller”被 离开了布局:

    views/layouts/welcome.rhtml

我在做什么错?

以下是我在我的application.html.erb

<div id="top-bar"> 
     <div id="user_nav"> 
     <% if current_user %> 
      <%= link_to "My Profile", current_user %> 
      <%= link_to "Logout", logout_path %> 
     <% else %> 
      <%= link_to "Register", new_user_path %> 
      <%= link_to "Login", login_path %> 
     <% end %> 
     </div> 
    </div> 
    <%= yield %> 

回答

5

无论你的布局,application.html.erbposts.html.erb应该呈现主杆为部分非常有帮助:

<%= render :partial => 'layouts/main_bar' %> 

所有布局包含包装页面的<html>元素;你没有一个布局环绕另一个布局。

+0

谢谢,但随着代码我越来越:“缺少局部布局/ main_bar” – 2010-10-06 22:02:33

+0

Err ..我忘了在文件名中加下划线。感谢您的帮助。自从你演示了如何做到这一点之后,我会将这个答案标记为正确答案。 – 2010-10-06 22:06:11

1

好信息的机构是正确的 - 的意见/布局/ application.html.erb“应该工作得很好。

您是否使用<%= ..... %>包含了“主要栏”内容(即,您是否缺少布局文件中的=登录?) 并且,您是否在布局文件的某处包含了<%= yield %>声明?

此外,您使用的Rails版本是什么?

你应该找到这个Layouts and Rendering in Rails于前往的轨道意见的基础知识和布局

+0

我已将我的application.html.erb文件的主体添加到主要问题中。我正在使用Rails 3.我刚刚意识到我已在我的post.html.erb布局中拥有所有。我应该吗? – 2010-10-06 21:49:04

1

我很困惑...你还有views/layouts/posts.html.erb吗?如果是这样的话,所有从PostsController渲染的视图都将使用此布局,而不是views/layouts/application.html.erb

+0

哦,好的。我只是误解了它的工作原理。 – 2010-10-06 21:51:42

+1

这个“答案”应该是一个评论 – Zabba 2010-10-06 21:55:10

相关问题