[英]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.