簡體   English   中英

Rails 4.2:如何強制重新加載模型定義?

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

如果你想重新加載模型類,你可以使用它

ModelClassName.reset_column_information

關於reset_column_information 的API 文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM