使用--skip-active-record后rails g model/scaffold无法生成模型求助
你遇到的问题核心在于当初创建应用时使用了--skip-active-record参数,这个参数会让Rails彻底跳过Active Record框架的初始化配置——哪怕你后来手动在Gemfile里添加了activerecord gem,Rails的生成器(generator)依然不会识别Active Record相关的生成逻辑,所以执行rails g model或rails g scaffold时,模型文件(比如app/models/article.rb)不会被创建。
1. 确保Active Record被加载到应用中
打开config/application.rb文件,找到class Application < Rails::Application这段代码,确保Active Record的railtie被正确加载:
require_relative "boot" require "rails/all" # 保险起见单独声明加载Active Record(rails/all已包含,但避免被跳过) require "active_record/railtie" Bundler.require(*Rails.groups) module YourAppName class Application < Rails::Application # 确保默认配置加载(如果之前被跳过需添加) config.load_defaults 6.0 # 其他应用配置... end end
2. 生成数据库配置文件
--skip-active-record会跳过config/database.yml的生成,你需要手动生成这个核心配置文件,在终端执行:
rails generate active_record:install
这个命令会创建config/database.yml,同时生成db/migrate目录(如果不存在的话)。
3. 完成数据库初始化
先执行bundle安装确保依赖正确加载:
bundle install
然后根据配置创建数据库(你的Gemfile已配置sqlite3,直接执行即可):
rails db:create
4. 重新生成模型/Scaffold
现在可以重新执行生成命令,注意模型名称要用单数(Rails遵循约定优于配置,单数名称会自动映射到复数表名):
rails g scaffold Article title:string text:string
这次会正常生成app/models/article.rb模型文件,同时生成对应的迁移、控制器、视图等内容。
如果之前已经用scaffold生成了控制器、视图等内容,可以选择删除这些文件后重新生成,或者执行生成命令时加上--force参数覆盖已有文件。
内容的提问来源于stack exchange,提问作者Joe Dow

