我正在创建一个需要将一些路由插入应用程序路由器的引擎。对于这个特殊的gem,如果可能的话,我宁愿不使用application的routes.rb。 有没有办法通过代码在路由器的特定位置插入路由?我正在寻找一个类似于以下内容的API:
Rails.application.routes.insert("resources :foos", :before => "some string in routes.rb")
如果我在引擎内创建一个config / routes.rb并定义一些路由,这种方法就可以了。 Rails足够聪明,可以将引擎的路由混合到应用程序的路由中,但是它会在路由列表的末尾添加它们。我需要它们出现在开头,所以引擎的路线优先。
我知道我可以通过在应用程序的routes.rb中安装引擎来命名路由,但这会创建一个我不想要的路由结构。我希望引擎的路由通过在实际应用程序中定义一些路由来查看它们是应用程序的一部分。
我有一个解决方法,即将以下内容添加到应用程序的routes.rb。
Rails.application.routes.draw do
MyEngine.setup_routes(self)
#...other routes below
end
MyEngine.setup_routes看起来像
def self.setup_routes(map)
map.get 'a_path', :to => 'a_controller#a_path'
end
这至少允许我控制在应用程序的路由列表中定义路由的点,但是用户仍然必须手动更新他的routes.rb(或者我必须构建一个执行它的安装程序)。似乎应该有一种方法告诉rails将一些路由添加到路由列表的开头...