在我的application.html.erb
中,我希望能够检测当前呈现的页面是否来自已安装的引擎(Forem,如果这很重要),以便我可以active
向导航栏添加一个类。有没有一种简单的方法可以检测到这一点?
我正在使用 Rails 3.2。
在我的application.html.erb
中,我希望能够检测当前呈现的页面是否来自已安装的引擎(Forem,如果这很重要),以便我可以active
向导航栏添加一个类。有没有一种简单的方法可以检测到这一点?
我正在使用 Rails 3.2。
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
。
一个非常相似的方法可以在不使用装饰器加载的情况下完成(仅使用 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
你可以使用这个:
<% if controller.controller_name == ""something" &&
controller.action_name == "something" %>
Do someting <!-- add you class -->
<% end %>