【问题标题】:Adding extra layout to specific controllers and actions in rails 3?为 Rails 3 中的特定控制器和操作添加额外的布局?
【发布时间】:2013-07-27 16:12:36
【问题描述】:

在我的 application.html.erb 中,我有一个 header partial. 我使用渲染标签进行渲染

<%= render 'layouts/header' %>

因此,此标头适用于所有控制器和所有操作。

我有一个下拉部分,我想在所有控制器中显示,除了标题部分之外,一个控制器除外。 我想要类似的东西

<%= render 'layouts/dropdown' except_controller_anycontroller %>

当我放

render :partial => 'layouts/dropdown'  

它只是呈现下拉部分,所有其他布局都丢失了(如页脚、页眉、正文)。我只想将额外的下拉部分添加到某些操作和控制器。

如何在 Rails 3.2.13 中实现这一点?

【问题讨论】:

  • 确保从布局文件中调用所有这些部分。否则我看不出你的 header, footer 等丢失的任何原因。
  • @Manoj 我知道我可以从布局文件中调用它们,但这将是代码的重复。我只是不想在单个控制器中使用它。

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

用这个替换你的渲染:

 <%= render 'layouts/dropdown' unless @disable_dropdown %>

然后您可以在任何您喜欢的控制器中简单地将 disable_dropdown 设置为 true:

def test_method
  @disable_dropdown = true
end

在你不想显示的控制器过滤器中调用这个方法:

在你的控制器顶部写下你的第一个方法:

before_filter :test_method

当您的请求到达此控制器时,它会自动调用。

希望它会有所帮助。谢谢

【讨论】:

  • 如何在控制器中将 disable_dropdown 设置为 true?
  • 我已经更新了我的答案。在你的控制器中使用 before_filter。
【解决方案2】:

我建议如下:

<%= render 'layouts/dropdown' unless params[:controller] == "controller_to_avoid" %>

【讨论】:

  • 这给了我我在编辑中提到的同样的问题。它只是呈现下拉部分而不是其他的。
  • @Mrudul_T 那还有另一个问题。该代码不会影响正在渲染的其他部分。
  • 抱歉。没听懂。你的意思是我的代码中还有另一个错误?
  • 我给出的答案不会阻止另一个部分被渲染。你把它放在你的application.html.erb了吗?还有&lt;%= render 'layouts/header'%&gt;
  • 是的,我把它放在旁边。
猜你喜欢
  • 2016-04-11
  • 1970-01-01
  • 2012-07-31
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
相关资源
最近更新 更多