繁体   English   中英

在 Rails 7 初始化程序中访问模型和模块

[英]Accessing models and modules in a Rails 7 initializer

这个问题涉及到需要在应用程序启动时设置 Rails 配置变量,并且该变量的值需要来自数据库中的数据(然后修改)。 所以,我有一个像这样的初始化器:

require "#{Rails.root}/lib/modules/facet_altering.rb"
include FacetAltering

Rails.application.config.reject_subjects = FacetAltering.reject

reject 方法可能很慢,并调用 Subject model(其中包含一些问题)。

如果我尝试要求 subject.rb、application_rb 和 app/models 的相关问题,那么我会更进一步,但最终会卡在uninitialized constant Subject::MySpecialConcern上。

可能有一些更好的方法来设置 reject_subjects 值; 我不想在每次使用 reject_subjects 的值时都运行 FacetAltering.reject,尽管如果没有其他解决方案出现(以减慢速度为代价),这可能是一个简单的“修复”。 或者,是否有另一种方法可以在应用程序启动时访问这些类?

编辑:根据下面的评论,这是在 config/application.rb 中:

%W[#{Rails.root}/lib/modules #{Rails.root}/test/mailers/previews].each do |path|
      config.eager_load_paths << path
    end

这篇文章提供了一个有用的线索:

升级到 Rails 7.0 后,Rails Model 在初始化程序中不再可用

所以,将我的代码放在 config/application.rb 中,如下所示:

config.after_initialize do
    Rails.application.config.reject_subjects = FacetAltering.reject
end

现在找到RuntimeError: Foreign key violations found in your fixture data. Ensure you aren't referring to labels that don't exist on associations. RuntimeError: Foreign key violations found in your fixture data. Ensure you aren't referring to labels that don't exist on associations. 而且我也许能够完成这个 Rails 6 -> 7 升级!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM