rails仅显示admin控制器的内容

时间:2016-03-04 00:50:14

标签: ruby-on-rails

如何将此代码放在/views/layouts/application.html.erb上 我希望它高于<%= yield %>因为我希望它像一个标题,但仅限于管理员控制器。

所以我的管理员视图中有这个代码,但是我想把它移到application.html.erb,所以我不想重复那段代码

<% if user_signed_in? %>

  <%= current_user.email %>
  <%= link_to('Logout', destroy_user_session_path, :method => :delete) %>

    <hr>        
        <ul class="admin-nav">
            <li rel="posts">Posts</li>
            <li rel="pages">Pages</li>
        </ul>
        <hr>        

<% end %>

2 个答案:

答案 0 :(得分:2)

这里最好的方法可能就是使用a nested layout,它基本上允许Rails调用特定于AdminController的布局(你将它放在app/views/layouts/admin.html.erb内)并在其中用于定义content_for块的文件,这些块也在主布局中引用,然后呈现该主布局。

更新显示示例

应用程序/视图/布局/ admin.html.erb

<% content_for :admin do %>
  <% if user_signed_in? %>
    <%= current_user.email %>
    <%= link_to('Logout', destroy_user_session_path, :method => :delete) %>

    <hr>        
      <ul class="admin-nav">
        <li rel="posts">Posts</li>
        <li rel="pages">Pages</li>
      </ul>
    <hr>
  <% end %>
<% end %>
<%= render template: "layouts/application" %>

应用程序/视图/布局/ application.html.erb

<%# other stuff for your layout %>

<body>
  <%= content_for?(:admin) ? yield(:admin) : yield %>
</body>

答案 1 :(得分:1)

/views/layouts/application.html.erb

将它放在标题标记

<%= yield :admin_only %>

并且,在您的其他页面中,将数据放入布局标题中,请执行以下操作:

<% content_for :admin_only do %>        
......data here ... 
<% end %>