【问题标题】:Rails - Render views common to specific controllerRails - 渲染特定控制器通用的视图
【发布时间】:2014-12-21 15:55:34
【问题描述】:

嗨,过去几个小时我一直在摆弄这个问题,但不确定如何解决以及最佳做法是什么。

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

这是我目前所拥有的:

app/views/layouts/_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 %>

这不起作用。我想如果正在使用 company_controller 即&lt;% if current_user&amp;&amp;current_page?(controller: companies) %&gt;,我可以定义此视图,但我不断收到以下信息:

错误

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.html.erb -> 这意味着我'我回到&lt;% if current_user&amp;&amp;current_page?(controller: companies) %&gt;。在这里大转转。

谁能解释一下这些东西的最佳实践,以及我如何为公司控制器呈现一个通用布局,而不是为应用程序的其余部分呈现通用布局?

感谢收看

【问题讨论】:

    标签: ruby-on-rails partial-views


    【解决方案1】:

    如果您将if 更改为以下内容,我认为您当前的逻辑将起作用:

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

    至于最佳实践,您可以通过将其添加到 Companies_controller.rb 来拥有特定于公司控制器的布局:

    layout :companies
    

    【讨论】:

      最近更新 更多