Gem 一个要把路由拆了的小轮子

winter · 2018年05月15日 · 最后由 zhaoyshine 回复于 2018年05月18日 · 3816 次阅读

哇喔,这是一个神奇的轮子(不要脸!)

Rails 项目越写越大,路由自然也就越来越多,有的路由针对客户端的,有的是针对管理后台的,有的是针对代理的等等。Rails 默认只是提供了一个地方config/routes.rb来设置路由,整的这个文件很长,个人觉得这不是很方便管理。

为什么会有拆分路由的这个想法呢?因为我最早接触的是 Python 的 web 框架Django,它默认是可以将路由分成不同文件来设置的。

最开始我只是在一个项目中简单的实现了将路由拆分,但每次新建项目后要想让路由可以分成不同的文件来设置,总要粘贴复制老项目的配置,因此就有了这个小轮子------一个可以把 Rails 路由文件按功能分成几个文件来写的小轮子。

安装

添加下面这行到 Gemfile:

gem 'wow-route', :git => 'https://github.com/winterbang/wow-route.git'

然后执行下面的命令

$ bundle

使用

执行下面的命令在config/routes 目录中生成admin.rb:

$ rails g wow:route admin

如果执行rails g wow:route api则生成api.rb, 然后可以像编辑config/routes.rb文件一样在admin.rb中使用 Rails 路由的语法糖来设置路由。 例如:

namespace :admin do
  resources :posts, :comments
end

欢迎大家挑错指正

项目地址:https://github.com/winterbang/wow-route

尝试了一下,很不错的 gem,解决了路由一大坨的问题,路由接口清晰了很多。

嗯嗯,其实这个 gem 的代码很少,使用也很简单,但可以让路由文件看起来更清楚些

就是把 routes.rb 分拆成多个文件放在 config/routes 目录下么?

IChou 回复

是的

为什么要用 Gem.

class ActionDispatch::Routing::Mapper
  def draw(routes_name)
    instance_eval(File.read(Rails.root.join("config/routes/#{routes_name}.rb")))
  end
end

demo

ls 取文件 非常的不 ruby 呀

xiaohesong 回复

为了使用方便啊,总部能每次新建项目都去复制粘贴吧。还有就是这么写不是很好,开发时如果更改路由需要重启才能重新加载,但这个 gem 把这些都做了

IChou 回复

ls 在写法上确实不太好,只是想先实现了,有什么好的方法希望欢迎赐教😄。 至于说类似instance_eval这样的方法好不好,能不能轻易用,如果没有找到更合适的实现方案也没有什么轻易就用这么一说了,既然有存在这个方法就是可以用的,不用纠结要不要用,实现是第一步😀。

Dir["#{Rails.root}/config/routes/*.rb"].each { |f| require f }

as181920 回复

试一下👍

winter 回复

复制黏贴啥。 太久没有写 rails,但是记得更改路由是不需要重启。

liukun_lk 回复

嗯嗯,和#5 楼的说的一样,其实实现也类似,只是单这样写不是很完善。

xiaohesong 回复

嗯嗯,用 rails 默认的路由文件写不需要重启,但如果只用你说的那个方法把路由拆分出去,是不能做到动态去加载路由的。

刚特意试了下,可以的。

winter 回复

是的,所以我在 initializer 监听文件的更改,就和你 Gem 里面的实现差不多。这样的话每次更改路由代码都不需要重启服务了。

xiaohesong 回复

额?我这里用的Rails 5.1.5还是不可以---把路由文件放在routes目录里,用 draw 方法去加载。可能实现上有不同吧。

xiaohesong 回复

修改config/routes.rb的文件是会重新加载的,但是修改config/routes/文件夹下面的路由应该是不行的。

liukun_lk 回复

嗯嗯,是的

liukun_lk 回复

。。。。。。我们讨论的问题不是后者嘛小哥哥😓

winter 回复

但是你如果修改完 routes 文件夹下面的路由再去改动 routes.rb 文件也是会加载的呀

这倒是,但是重构的时候,路由的改动几乎很小了。

一直用 5 楼说的方法,但我觉得楼主挺好,我也想造个轮子😂

winter 回复

一直这么用好多年了,无需重启。

估计迟到会有 app/routes/config/routes/ 目录 😀 😀

不管好不好,造轮子都应该鼓励

coderliu develop 下修改路由文件不生效 提及了此话题。 08月10日 12:03
需要 登录 后方可回复, 如果你还没有账号请 注册新账号