繁体   English   中英

Rails:布局中特定于控制器的菜单

[英]Rails: Controller-specific menu in layout

如何在 Rails 的一般应用程序布局中添加特定于控制器的菜单(或 div)?

如果我正确理解了您需要在布局中特殊放置的问题。

在布局中所需的 position 中使用 <%= yield(:) %>,例如:

    # application.html.erb
    <%= yield(:right_menu) %>

    # show.html.erb
    <% content_for :right_menu do %>
    <!-- Everything in this block will be shown at the position yield(:right_menu) in layout -->
    <% end %>

http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#method-i-content_for中查看更多信息

方法1:在controller中设置一个变量

class SomeController
  before_filter :set_to_use_menu

  private

  def set_to_use_menu
    @use_menu = true
  end
end

方法二:在布局中确定控制器的名字

<%- if controller_name == "your_controller_name" %>
  <%= render :partial => "the_menu" %>
<%- end %>

除了 content_for 方法(可能是也可能不是您想要的),还有一些其他选项。

您可以在 controller 中使用 before_filter 来设置变量:

# Controller
class TestController < ApplicationController
  before_filter :set_variable

  def set_variable
    @my_variable = true
  end
end

# Layout
if @my_variable
  # Do the controller-specific stuff you want to do
end

或者,您可以单独留下 controller,只检查布局中的 controller 名称:

# Layout
if controller.controller_name == 'test'
  # Do the controller-specific stuff you want to do
end

只需在布局中调用适当命名的部分

<%= render :partial => "#{controller_name}_menu" %>

如果您的 controller 是WidgetsController ,那么这将使用_widgets_menu.html.erb下的部分./app/views/layouts

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM