在一个 Rails 项目中,有很多自带的 genertors,比如最常用的 scaffold,通过命令 rails generator 可以列出所有的 generators:
Rails:
assets
controller
generator
helper
integration_test
mailer
migration
model
resource
scaffold
scaffold_controller
task
ActiveRecord:
active_record:devise
active_record:migration
active_record:model
如果你想查看一个具体 generator 的使用说明,比如 scaffold,使用
rails g scaffold --help
大部分 Rails 自带的 generators 都放到 gem raities-4.0.0/rails/generators中。 我们就拿scaffold 举例子,主要有三部分组成 :
templates/ 所有的模板
USAGE 可以理解成readme
scaffold_generator.rb #generator入口
下面主要看看 scaffold_generator.rb, 这里就不贴代码,如果感兴趣可以 进入源码位置 看看,这里这是说明几个关键点:
1)source_root 定义了 templates 的位置 2)其中有一句 hook_for :scaffold_controller, required: true;hook_for 的作用唤起一个 generator。 3) 所有的 public 方法都会被调用。
rails/generators/initializer/initializer_generator.rb generators/initializer/initializer_generator.rb rails/generators/initializer_generator.rb generators/initializer_generator.rb $LOAD_PATH
在我们日常的工作中,总会有一些 工作是一些重复,且相同的工作,特别像后台管理页面的一些页面。针对这些情况,编写相应的 generator,可以大大提高我们的工作效率。
[题外话] 个人向大家showbuilder(这个@ery编写的), 个人觉得是后台管理页面的必备 gem,这里 就不对它细说了。
今天要的说是 基于它写了一套generators
rails generator showbuilder:slim
rails generator showbuilder:scaffold
比如运行 rails g showbuilder:scaffold admin/my_generators
invoke resource_route
route namespace :admin do
resources :my_generators
end
invoke slim
create app/views/admin/my_generators
create app/views/admin/my_generators/index.html.slim
create app/views/admin/my_generators/edit.html.slim
create app/views/admin/my_generators/show.html.slim
create app/views/admin/my_generators/new.html.slim
create app/views/admin/my_generators/_form.html.slim
create app/controllers/admin/my_generators_controller.rb
identical lib/reborn/base_mongo.rb
create app/models/admin/my_generator.rb
当然如果你想使用自己的模板,那么在 Rails.root/config/showbuilder/templates 下建立对于的模板文件就可以了。
如果你对这个 gem 感兴趣,可以阅读源码 了解相关机制。