如何在Ruby on Rails的lib目录下生成控制器/模型/视图?
解决Rails生成器指定自定义lib下路径的问题
嘿,手动复制文件确实够烦的——咱们来彻底解决这个问题,让生成器直接把模型文件放到你想要的/lib/modules/monitor/app/models目录里!
我给你分享两个实用的方法,按需选择:
方法一:全局修改生成器默认路径(适合长期用这个目录结构)
如果你打算一直用这个lib下的模块结构,直接在Rails配置里改生成器的默认输出路径就行:
- 打开
config/application.rb,添加生成器配置:
config.generators do |g| # 针对模型生成器设置自定义路径 g.model do |m| m.paths = { # 模型文件输出到指定lib子目录 model: ['lib/modules/monitor/app/models'], # 迁移文件还是保留默认的db/migrate,也可以改成你想要的路径 migration: ['db/migrate'] } end end
- 别忘了让Rails能加载这个自定义目录下的模型,同样在
config/application.rb里添加自动加载路径:
# 添加自定义模型目录到自动加载和预加载路径 config.autoload_paths += %W(#{config.root}/lib/modules/monitor/app/models) config.eager_load_paths += %W(#{config.root}/lib/modules/monitor/app/models)
配置完之后,再运行rails generate model Whatever,模型文件就会直接生成到lib/modules/monitor/app/models/whatever.rb啦!
方法二:自定义生成器(适合偶尔用这个路径,不想全局修改)
如果只是偶尔需要生成到这个特殊路径,不想改全局配置,可以写个简单的自定义生成器:
- 创建生成器文件
lib/generators/monitor_model_generator.rb:
class MonitorModelGenerator < Rails::Generators::NamedBase source_root File.expand_path('templates', __dir__) def create_model_files # 生成模型文件到目标路径 template 'model.rb.erb', "lib/modules/monitor/app/models/#{file_name}.rb" # 生成迁移文件(保留默认位置,也可以修改路径) migration_template 'migration.rb.erb', "db/migrate/create_#{plural_table_name}.rb" # 按需添加测试文件、工厂文件等 end end
- 创建模板文件
lib/generators/monitor_model/templates/model.rb.erb:
class <%= class_name %> < ApplicationRecord end
- 运行自定义生成器命令:
rails generate monitor_model Whatever
这样就能精准生成到你指定的lib子目录了。
小提示
不管用哪种方法,生成完模型后,记得重启一下Rails服务器或者控制台,确保新的自动加载路径生效,不然可能会出现模型找不到的错误哦!
内容的提问来源于stack exchange,提问作者JuanMartinez
相关产品推荐
相关产品推荐

