你如何通过ruby代码找出你所使用的控制器/动作?

时间:2010-08-28 00:57:55

标签: ruby-on-rails ruby

我有一个不同的子标题部分我想呈现依赖于我在我的应用程序中的位置。我如何确定我在红宝石的位置?或者我需要解析URL?

示例:

如果我在我的根级别,我想使用/ home / subheader,如果我在控制器'test'中我想渲染/测试/ subheader等等...等等...

基本上寻找这个部分:

(在我的申请视图中)

<%- if  ############ %>
<%= render :partial => '/home/subheader' %>
<%- elsif ########### %>
<%= render :partial => '/test/subheader' %>
<%- else  %>
<%= render :partial => '/layouts/subheader' %>
<%- end %>

由于

2 个答案:

答案 0 :(得分:2)

您可以使用current_page?

if current_page? :controller => 'home', :action => 'index'
  do_this
end

或使用控制器的方法controller_name

if controller.controller_name == 'home'
  do_that
end

如果您在每个控制器的基础上使用它,您可能需要layouts或使用不同的模板,根据控制器/操作呈现不同的部分是代码气味。

PS:您还可以尝试获取params[:controller]params[:action]变量,但如果您的路线不是标准/:controller/:action

答案 1 :(得分:0)

管理此方法的一种稍微简单的方法是使用content_for。例如:

#app/layouts/application.html.erb

<html>
  <body>
    <h1>My Application</h1>
    <%= yield(:subheader) || render(:partial => 'layouts/subheader') %>
    <%= yield %>
  </body>
</html>

此布局将首先尝试渲染从视图传入的子标题内容,否则将呈现部分“布局/子标题”。然后在每个需要自定义子标题的视图中,您所要做的就是:

#app/views/home/index.html.erb

<% content_for :subheader, render(:partial => 'subheader') %>

在你的另一个控制器中,你可以使用完全不同的东西,比如:

#app/views/other/show.html.erb

<% content_for :subheader do %>
  <h2>A different subheader</h2>
<% end %>