应用程序布局中的Rails条件侧边栏

Aut*_*act 5 layout views ruby-on-rails

以下是我的应用程序布局文件

  .container_12.clearfix
  = render :partial => 'shared/flashes'

  .grid_8
    = render :partial => 'shared/search'        
    = yield
  .grid_4
    = yield(:sidebar)
Run Code Online (Sandbox Code Playgroud)

它必须是网格,一个用于内容,另一个用于侧边栏.现在我正在创建一个登录页面,其中我不想显示我的侧边栏(只是单个网格.我可以简单地创建新的布局,其中.grid_12 div作为单个网格.

但这让我有2个应用程序布局.如何使相同的应用程序布局条件化以产生侧边栏?

如果使用侧边栏,它将与上面的相同,只是一个.grid_12,如下所示

  .container_12.clearfix
  = render :partial => 'shared/flashes'      
  .grid_12
    = render :partial => 'shared/search'        
    = yield
Run Code Online (Sandbox Code Playgroud)

Sim*_*tti 4

您可以检查内容是否:sidebar存在,如果存在则渲染侧边栏。Rails 2.3.5 将有一个content_for?方法。与此同时,你可以使用我的有用宝石。

- if has_content?(:sidebar)
  .grid_8
    = render :partial => 'shared/search'        
    = yield
  .grid_4
    = yield(:sidebar)
- else
  .grid_12
  = render :partial => 'shared/search'        
  = yield
Run Code Online (Sandbox Code Playgroud)

否则,您可以假设 if :sidebar == false 则没有侧边栏。

  def sidebar(enable = true, &block)
    if enable
      content_for :sidebar, &block
    else
      @fullpage = true
    end
  end

  def fullpage?
    !!@fullpage
  end

- if fullpage?
  .grid_12
  = render :partial => 'shared/search'        
  = yield
- else
  .grid_8
    = render :partial => 'shared/search'        
    = yield
  .grid_4
    = yield(:sidebar)
Run Code Online (Sandbox Code Playgroud)

更新:

如果您使用的是 Rails 3.x,请检查类似问题的答案以获得正确的解决方案。上面的解决方案不适用于 Rails 3。