如何使特定视图不从application.html.erb继承?

时间:2016-01-29 18:00:37

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个特定的观点,我不想“继承”layouts/application.html.erb的代码。它应该怎么做?

执行此操作的一种方法是在application.html.erb中加入:

<% except current_page?(page_path) %>
  content
<% end %>

但我觉得更像是你应该在特定视图中指定的内容。这件事的惯例是什么?

3 个答案:

答案 0 :(得分:4)

对于一个操作,您可以尝试:

class TestController < ApplicationController
  def method_name
    render :layout => 'another_layout'
  end
end

对于控制器中的所有操作,您可以执行以下操作:

class TestController < ApplicationController
  layout 'another_layout'

  #action methods here
end

答案 1 :(得分:2)

如果您不希望将布局应用于特定操作,则可以在控制器级别禁用布局渲染。例如,如果您希望MyController#some_action视图不在布局中呈现,则可以执行以下操作:

class MyContorller < ApplicationController
  def some_action
    # Your logic here
    render layout: false
  end
end

这样,您的视图(app/views/my_controller/some_action.html.erb)不会从application.html.erb继承,并且只会包含视图文件中的内容。有关渲染的更多信息,您可以查看here

答案 2 :(得分:0)

对于选定的行动,您可以尝试这样......

class MyContorller < ApplicationController
  layout 'other_layout_name', only: [:method_1, :method_2, :method_4] 

  #action methods here
end