Rails - 渲染特定控制器的常见视图

时间:2014-12-21 15:55:35

标签: ruby-on-rails partial-views

您好我在过去几个小时内一直在摆弄这个问题,我不确定如何解决这个问题以及做这件事的最佳做法。

我有两种类型的内容视图。一个用于大多数应用程序的单列,另一个用于两个列,我想用于3个特定控制器。

这是我到目前为止所拥有的:

  

应用/视图/布局/ _content.html.erb

<% if current_user&&current_page?(controller: companies) %>

<div class="bevel-container"> 

    <div class="row">

        <div id="left_navbar" class="col-md-2">

        </div> 

        <div id="right_content" class="col-md-10"> 
                <p>The 2 column partial is showing</p>

                <%= yield %>

        </div> 

    </div>  

</div><


<% else %>

    <div class="container"> 

        <p>The single column partial is showing</p>
        <%= yield %>

    </div>

<% end %>

这不起作用。如果使用companies_controller,我认为我能够定义此视图,即<% if current_user&&current_page?(controller: companies) %>,但我会继续获得以下内容:

  

错误

undefined local variable or method `companies' for #<#<Class:0x00000004c2fe58>:0x00000005194a88>

在我的 app / views / layouts / application.html.erb 中,我有

<div> <!-- Outer Div -->

    <%= render 'layouts/top_nav' %> 

    <%= render 'layouts/content' %>     

</div><!-- Close Outer Div -->

我对如何解决这个问题感到有些困惑。我尝试创建文件app/views/layouts/_companies_html.erb来处理2列内容视图但我不知道要将application.html.erb更改为什么,以便在使用companies_controller时呈现_companies.html.erb - &GT;这意味着我回到<% if current_user&&current_page?(controller: companies) %>。在这里转转圈子很大。

任何人都可以解释这个问题的最佳实践,以及如何为公司控制器渲染公共布局,而不是应用程序其余部分的公共布局?

感谢您寻找

1 个答案:

答案 0 :(得分:1)

如果您将if更改为类似的内容,我认为您当前的逻辑可行:

<% if current_user && controller_name == "companies" %>

对于最佳实践,您可以通过将其添加到companies_controller.rb来获得特定于公司控制器的布局:

layout :companies