【发布时间】:2016-03-23 04:49:59
【问题描述】:
在我们的 Rails 4.2 应用程序中有一个模型 payment_request.rb,我们想在其控制器 payment_requests_controller.rb 中强制使用 before_action 重新加载它。有没有办法重新加载?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4
在我们的 Rails 4.2 应用程序中有一个模型 payment_request.rb,我们想在其控制器 payment_requests_controller.rb 中强制使用 before_action 重新加载它。有没有办法重新加载?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4
@Mariah 建议您重新加载模型类的实例,但如果您的意图是真正重新加载类的定义,您可以使用以下技巧:
before_action :reload_model
def reload_model
Object.send(:remove_const, :PaymentRequest)
load 'app/models/payment_request.rb'
end
请注意在类重新加载期间无法从应用程序的同一实例的其他部分访问 PaymentRequest 等副作用。实际上我怀疑在你的控制器代码中这样做是否正确。
当一些常量值需要更新时,重新加载一个类可能很有用(因为它在第一个类加载时填充并在一段时间内更改)。但是如果在您的应用程序运行期间发生这种情况,您最好考虑将基于常量的解决方案更改为更合适的解决方案。
【讨论】:
【讨论】:
您希望模型何时重新加载?不确定为什么要在 before_action 上重新加载,您可以简单地以任何方法调用“@payment_request.reload”
如果你想在之前的动作中使用它,你必须在你的控制器中添加这个 before_action。您还必须定义它调用的函数。例如,
before_action :reload
def reload
@payment_request.reload
end
【讨论】: