Rails 引擎教程警告(配置引擎)

时间:2021-06-26 04:56:54

标签: ruby-on-rails

在 RailsGuides Section 4.4 Configuring an engine 上,给出了以下警告声明:

<块引用>

这里使用类的String版本非常重要, 而不是类本身。如果你要使用这个类,Rails 将尝试加载该类,然后引用相关表。 如果表不存在,这可能会导致问题。 因此,应该使用一个字符串,然后使用 稍后在引擎中保持不变。

即在初始化程序中,正确的方法是声明 Blorgh.author_class = "User"Blorgh.author_class = User 是错误的。

我不明白指南中不存在的表是什么意思(我假设它是用户表)。如果在初始化应用程序时用户表不存在,则在运行所有初始化后它也不存在。

另外,既然我们只是向引擎提供 ActiveRecord 模型类,为什么还需要引用表/做数据库查询?

1 个答案:

答案 0 :(得分:1)

Rails 在实例化 ActiveRecord 类时检查表结构,因此此时表必须存在。添加模型的引擎需要运行数据库迁移,因此如果您在初始值设定项中引用 ActiveRecord 模型,则安装后会有一个点,其中引用类没有表。

db:migrate 任务加载 Rails(从而运行初始化程序),因此您最终会遇到一个鸡与蛋的问题,您无法添加新表,因为 Rails 尝试加载该类,并且有没有桌子。因此最好将类设置为字符串,然后在运行时使用 constantize 来实例化类。