0

我有许多控制器,我想在其中设置一个变量 @top_tier_link,该变量具有指向这些控制器的索引操作的链接。现在我有这样的:

class School::CoursesController < ApplicationController  
  before_filter :set_top_tier_link

  private
    def set_top_tier_link
      @top_tier_link = school_courses_path
    end
end

class School::UsersController < ApplicationController  
  before_filter :set_top_tier_link

  private
    def set_top_tier_link
      @top_tier_link = school_users_path
    end
end

我想在过滤器之前定义一个,它可以为任何控制器自动设置它。我怎么能做到这一点?

编辑:

这只是一个示例,需要这种帮助器的控制器数量要多得多。此变量用于布局级别,因此大多数控制器都需要它。

4

1 回答 1

1

在 ApplicationController 中定义它。在那里,您可以根据params[:controller]变量进行区分。像这样的东西:

before_filter :set_top_tier_link

def set_top_tier_link
  case params[:controller]
    when 'Courses'; @top_tier_link = school_courses_path
    when 'Users'; @top_tier_link = school_users_path
  end
end

或者甚至更好地为此指定一个助手,它的作用几乎相同。像这样:

def top_tier_link
  @top_tier_link ||= case params[:controller]
    when 'Courses'; school_courses_path
    when 'Users'; school_users_path
  end
end

helper_method :top_tier_link

更新:如果您不想硬编码,路径名可以自动生成。有点危险,但它应该做的工作:

def top_tier_link
  @top_tier_link ||= send(params[:controller].gsub("/","_")+"_path")
end
于 2012-08-19T10:21:29.643 回答