1

在我的application.html.erb中,我希望能够检测当前呈现的页面是否来自已安装的引擎(Forem,如果这很重要),以便我可以active向导航栏添加一个类。有没有一种简单的方法可以检测到这一点?

我正在使用 Rails 3.2。

4

3 回答 3

6

Forem::ApplicationController您可以通过重新打开类来添加辅助方法:

Forem::ApplicationController.class_eval do
  def forem?
    true
  end

  helper_method :forem?
end

例如添加上面的文件app/decorators/forem/application_controller_decorator.rb

这样,每次 Forem 的控制器呈现视图时,您都可以forem?在视图中调用。

应用程序.html.erb

<% if forem? %>
  # do something
<% end %>

您可能想先检查当前实例respond_to?(:forem?),或者添加一个forem?返回false您自己的方法application_controller.rb

于 2013-09-26T12:46:14.940 回答
1

一个非常相似的方法可以在不使用装饰器加载的情况下完成(仅使用 Rails 默认加载),例如对于 Thredded:

#This file would be at app/controllers/thredded/application_controller.rb in your main_app repo

require_dependency File.expand_path("../../app/controllers/thredded/application_controller",
  Thredded::Engine.called_from)

module Thredded
  class ApplicationController < ::ApplicationController
    def thredded?
      true
    end
  end
end

然后在你自己的ApplicationController中添加默认值和helper_method声明:

class ApplicationController < ActionController::Base
  helper_method :thredded? 
  def thredded?
    false
  end

  # etc

end
于 2017-06-11T12:04:03.910 回答
0

你可以使用这个:

<% if controller.controller_name == ""something" && 
               controller.action_name == "something" %> 
   Do someting  <!-- add you class -->
<% end %>
于 2013-09-26T10:53:01.840 回答