2016-03-23 19 views

回答

1

@Mariah建議你的方式來重新加載模型類的實例,但如果你的目的是要真正重新加載類的定義,你可以用這一招做到這一點:

before_action :reload_model 

def reload_model 
    Object.send(:remove_const, :PaymentRequest) 
    load 'app/models/payment_request.rb' 
end 

在這個類正在重新加載期間,請小心不可能從您的應用程序的相同實例的其他部分訪問PaymentRequest的副作用。其實我懷疑在控制器代碼中這樣做是否正確。

當某些常數值應該更新時(因爲它是在第一類加載時填充並在時間內發生更改)重新加載類可能很有用。但是,如果在應用程序生效期間發生這種情況,最好考慮將基於常量的解決方案更改爲更合適的解決方案。

+0

'無法從您的應用程序的相同實例的其他部分訪問PaymentRequest' - 其他用戶是否會因重新加載而受到影響?我們的應用程序是多租戶。 – user938363

+0

@ user938363我相信這取決於您的應用程序託管方式(線程,進程,Web和應用程序服務器等)和使用情況。我不確定多租戶是什麼意思,但你肯定有風險。如果除了重新加載類,還有其他方法,我會建議使用它們。 – twonegatives

1

您希望模型在什麼時候重新加載?不知道爲什麼你想要在before_action上重新加載,你可以簡單地在任何方法中調用「@ payment_request.reload」

如果你希望在before操作中,你必須在控制器中添加before_action。你還必須定義一個它調用的函數。例如,

before_action :reload 

def reload 
    @payment_request.reload 
end 
+0

我們正在尋找重新加載類定義。 – user938363