可安装的发动机安装在哪条路径上

mxg*_*grn 9 routes ruby-on-rails rails-engines ruby-on-rails-3.1

我需要知道,从可安装引擎的布局内部,它当前正在安装的路径.怎么办呢?

例如我的routes.rb包含以下行:

  mount BackendCore::Engine => "/backend"
Run Code Online (Sandbox Code Playgroud)

从BackendCore内部,我需要访问"/ backend"的值.

Chr*_*nig 10

如果引擎被:as =>命名为不同的名称,则查询named_routes将是不够的.这个猴子补丁会做:

class Rails::Engine
  def self.mounted_path
    route = Rails.application.routes.routes.detect do |route|
      route.app == self
    end
    route && route.path
  end
end
Run Code Online (Sandbox Code Playgroud)

现在打电话mounted_path给引擎:

BackendCore::Engine.mounted_path => "/backend"
Run Code Online (Sandbox Code Playgroud)

注意:请注意,在生产模式下,在加载主应用程序的路由之前,会评估引擎中的类.在类宏中调用此方法可能不起作用!


mxg*_*grn 8

更新:这可能只适用于Rails 3!

我找到了解决方案:

Rails.application.routes.named_routes[:backend_core].path #=> "/backend"
Run Code Online (Sandbox Code Playgroud)