【问题标题】:Rails - rendering a layout for a partialRails - 为部分渲染布局
【发布时间】:2011-08-14 14:55:16
【问题描述】:

这是我正在尝试做的一些模型代码:

class ApplicationController < ActionController::Base
  layout "application"
end

class SomeController < ActionController::Base

  verify :method => :get, :only => [:index]
  def index
    @some_objects = Some.collect
  end

end

# Now in: views/some/index.html.erb

<% if @some_objects %>
  # use the application layout
  <%= render(:partial => 'some/objects', :locals => {:some_objects => @some_objects}) %>
<% else %>
  # use a different layout than application
  # some/sales_page --> views/some/_sales_page.html.erb
  # layouts/sales --> views/layouts/sales.html.erb
  <%= render('some/sales_page', :layout => 'layouts/sales') %>
<% end %>

如您所见,我正在尝试为部分 some/sales_page 呈现与应用程序不同的布局。我该怎么办?

注意:我的 Rails 版本是 2.3.11。

【问题讨论】:

    标签: ruby-on-rails layout view partial


    【解决方案1】:

    这很简单,render 方法采用:layout 选项(基本上就是您的示例的方式),但是您的布局可以与调用文件位于同一目录中,并且它使用部分命名约定(即以下划线开头)。因此,在您的示例中,if 将类似于以下内容:

    #In: views/some/index.html.erb
    
    <% if @some_objects %>
      # use the application layout
      <%= render(:partial => 'objects', :locals => {:some_objects => @some_objects}) %>
    <% else %>
      <%= render(:partial => 'sales_page', :layout => 'sales_layout') %>
    <% end %>
    

    views/some 文件夹的内容将如下所示:

    views/some/index.html.erb
    views/some/_objects.html.erb
    views/some/_sales_page.html.erb
    views/some/_sales_layout.html.erb
    

    有关该主题的更多信息,请查看thisthisthis

    【讨论】:

      【解决方案2】:

      您只能在控制器层更改布局。

      class SomeController < ActionController::Base
        layout :choose_layout
        verify :method => :get, :only => [:index]
        def index
          @some_objects = Some.collect
        end
      
        private
        def choose_layout
          @some_objects = Some.collect
          @some_objects ? "application" : "different_layout"
        end
      end
      

      【讨论】:

      • 我投了反对票,因为You can change layout only in controller layer. 不准确。 render 方法接受一个模板。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      相关资源
      最近更新 更多