【问题标题】:how to get the routes of my app in which my engine is mounted from the engine?如何从引擎获取安装了我的引擎的应用程序的路线?
【发布时间】:2019-04-17 13:01:51
【问题描述】:

我想通过引擎中编写的代码从引擎中列出应用程序中存在的所有路由,例如使用以下方法获取应用程序中的应用程序路由:

routes = Rails.application.routes.routes
routes.collect {|r| r.path.spec.to_s }

上面的命令列出了主应用程序中可用的路由

1.引擎中用于获取“引擎中”应用程序路由的代码是什么?

如果我在引擎中使用上述代码,我将无法获取路线

【问题讨论】:

  • 我不在电脑前,但你的引擎有一个类名。像 GemName::Engine 这样的东西。尝试在上述方法调用中使用引擎类而不是 Rails。
  • 您查看6.3 Routes 引擎指南了吗?
  • 我也试过了,它会抛出一个错误 undefined method 'application',但是谢谢 - @Nate
  • 我看到了文档和新的答案。当。我很接近。哈哈

标签: ruby-on-rails ruby ruby-on-rails-5 rails-engines


【解决方案1】:

在引擎中Rails.application.routes.routes 将是其父应用程序的路由。

YourEngineClass::Engine.routes.routes 将是引擎的路由(请记住,这些不会有来自主应用程序的路由前缀)

更新: 路线在应用初始化后可用。要使它们在 rake 中可用,您需要使您的任务依赖于 :environment

namespace :your_engine do
  desc "test"
  task some_task: :environment do
    puts "Routes:"
    puts Rails.application.routes.routes.collect {|r| r.path.spec.to_s }.join("\n")
  end 
end

【讨论】:

  • 不,我的问题不是获取引擎的路由来从引擎获取应用程序的路由,我尝试在引擎中使用 Rails.application.routes.routes,我没有给我任何定义的资源路由例如:资源:应用程序中的书籍,如果我在引擎中使用 Rails.application.routes.routes 我无法获取书籍控制器@vasfed 的路由
  • @NarayananV 引擎在同一个 ruby​​ 进程中运行,一旦应用程序初始化并加载了路由,就没有什么能阻止您访问这些。如果这不起作用 - 请在您尝试访问这些时提供更多背景信息
  • 好的,我在引擎中创建了一个 rake 任务,我正在尝试从该任务文件@vasfed 访问应用程序路由
  • @NarayananV 应用需要加载,rake 默认不加载,需要你的任务依赖:environment
  • 它已经依赖于 :environment namespace :user_namespace do desc "load new routes" task routes_setup: :environment do route_details = Rails.application.routes.routes.map do |route|{ path: route.path.spec.to_s, controller: route.defaults[:controller], action: route.defaults[:action] } end @vasfed
猜你喜欢
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-23
  • 2017-08-25
  • 1970-01-01
相关资源
最近更新 更多