在RailsGuides 第4.4节配置引擎上,给出了以下警告声明:
这里非常重要的是使用类的字符串版本,而不是类本身。如果要使用该类,Rails将尝试加载该类,然后引用相关表。如果表还不存在,这可能会导致问题。因此,应该使用字符串,然后在引擎中使用Constan阵将其转换为类。
也就是说,在初始化器中,正确的方式是声明Blorgh.author_class = "User"和Blorgh.author_class = User是错误的。
我不明白指南对不存在的表意味着什么(我假设它是用户表)。如果在初始化应用程序时用户表不存在,那么在运行所有初始化之后,它也将不存在。
此外,既然我们只是向引擎提供ActiveRecord模型类,为什么需要引用表/执行数据库查询?
发布于 2021-06-27 21:57:36
Rails在实例化ActiveRecord类时检查表结构,因此该表必须在这一点上存在。添加模型的引擎需要运行数据库迁移,因此如果在初始化器中引用ActiveRecord模型,则在引用类没有表的地方有一个点后安装。
db:migrate任务加载Rails (因此运行初始化程序),因此您最终会遇到一个鸡和蛋问题,您无法添加新的表,因为Rails试图加载类,而且没有表。因此,最好将类设置为字符串,然后在运行时使用constantize实例化类。
https://stackoverflow.com/questions/68139357
复制相似问题