我已经阅读了 Rails 3 Engines 提供的 Overriding named routes并征求了一些新的答案,但是如果您的目标是批量删除路由,那么所有解决方案都感觉很糟糕。
预先设置路由以覆盖引擎的路由是有效的;但是,当引擎资源丰富时,它会变得很耗时。嵌套资源使复杂性更加复杂。
An::Engine.routes.prepend do
match "/route_goes_here" => redirect("/404")
end
就我而言,我想确信所有的路线都消失了。
我已经阅读了 Rails 3 Engines 提供的 Overriding named routes并征求了一些新的答案,但是如果您的目标是批量删除路由,那么所有解决方案都感觉很糟糕。
预先设置路由以覆盖引擎的路由是有效的;但是,当引擎资源丰富时,它会变得很耗时。嵌套资源使复杂性更加复杂。
An::Engine.routes.prepend do
match "/route_goes_here" => redirect("/404")
end
就我而言,我想确信所有的路线都消失了。
如果您要删除路由,则很有可能您还需要修改其他代码(想想使用路径帮助程序的代码,一旦删除路由就不会定义)。
对于我的 SuperDuper::Engine,我创建了一个 SuperDuper::Configuration 模块。在引擎的 config/routes.rb 中,我根据配置定义路由。定义辅助方法以有条件地呈现您的各种链接/表单/按钮。
通过覆盖配置模块的设置,您可以控制在应用程序启动时如何或是否包含引擎的路由。
module SuperDuper
module Configuration
def self.documents=(bool)
@documents = bool
end
def self.documents
@documents.nil? ? true : @documents
end
end
end