我们的Rails 4.2应用程序中有一个名为
payment_request.rb
的模型,并且我们希望在其控制器payment_requests_controller.rb
中使用before_action
来强制重新加载它。是否有一种方法可以重新加载它?payment_request.rb
的模型,并且我们希望在其控制器payment_requests_controller.rb
中使用before_action
来强制重新加载它。是否有一种方法可以重新加载它?@Mariah建议您使用一种重新加载模型类实例的方法,但如果您真正想要重新加载类的定义,可以使用以下技巧:
before_action :reload_model
def reload_model
Object.send(:remove_const, :PaymentRequest)
load 'app/models/payment_request.rb'
end
注意副作用,比如在类重新加载期间无法从应用程序的其他部分访问PaymentRequest
。实际上,我怀疑在控制器代码中这样做是否是正确的。
当某些常量值需要更新时(因为它们在第一次加载类时填充并随时间变化),重新加载类可能很有用。但是,在您的应用程序正在运行时发生此情况时,最好考虑将基于常量的解决方案更改为更合适的解决方案。
before_action :reload
def reload
@payment_request.reload
end