我认为views / layouts / application.html.erb适用于所有布局?

时间:2010-10-06 21:38:24

标签: ruby-on-rails layout

我正试图在rails应用程序上设计我的ruby。我创建了views / layouts / posts.html.erb,用于设置PostsController的{​​{1}}视图。

无论用户正在查看什么视图,我都希望添加一个始终位于页面顶部的主栏。我认为这就是views/layouts/application.html.erb的用途。

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

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

         

    views/layouts/application.rhtml

  •   
  • 单个控制器中的所有视图都将使用此布局。对于   例如,布局   weclome_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 %>

3 个答案:

答案 0 :(得分:5)

您的布局application.html.erbposts.html.erb都应该将主栏显示为部分:

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

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

答案 1 :(得分:1)

信息是正确的 - 'views / layouts / application.html.erb'应该正常工作。

您是否使用<%= ..... %>包含了“主栏”内容(即你错过了布局文件中的=标志吗?) 并且,您是否在布局文件中的某处包含了<%= yield %>语句?

另外,你使用的是什么版本的Rails?

你应该发现这个Layouts and Rendering in Rails对于获取rails视图和布局的基础非常有帮助

答案 2 :(得分:1)

我很困惑......你还有意见/布局/ posts.html.erb吗?如果是这种情况,从PostsController呈现的所有视图都将使用此布局而不是views / layouts / application.html.erb