[英]Rails 4.2: How to force to reload model definition?
在我們的 Rails 4.2 應用程序中有一個模型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 上重新加載,您可以簡單地在任何方法中調用“@payment_request.reload”
如果您希望在 before 操作中使用它,則必須在控制器中添加此 before_action。 您還必須定義一個它調用的函數。 例如,
before_action :reload
def reload
@payment_request.reload
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.