簡體   English   中英

Rails Active Record模型生命周期

[英]Rails Active Record model lifecycle

我有一個Active Record模型方法,該方法基本上只是一個數據庫查詢,並且我想緩存結果,理想情況下就像通過模型中的局部變量一樣簡單:

my_data = method_already_called ? stored_results : do_query

這使我意識到我並不真正了解Active Record模型的對象生命周期,並且所有Rails指南確實告訴您有關回調的信息。 具體來說,我可以猜想該對象將在用戶想要檢索與該對象相關聯的某些數據時創建,但是我不知道何時該對象將被銷毀。

在實際的水平上,比如說用戶請求一些信息,這將導致創建AR對象,從DB獲取一些實例數據並對其進行操作,然后再將其呈現給用戶。 如果用戶要指示該對象根據該信息執行某項操作,該對象在內存中會停留多長時間?

提前致謝。

編輯:我對Ruby 2.4上的Rails 5.1的行為特別感興趣。

實際上,只要保留對此實例的引用即可。 在大多數情況下-直到請求完成。

class Model
  # most common memoization pattern
  def something
    @cached_result ||= do_query
  end
end

因此,當您的模型被實例化時(在controller / service / etc中),只要您可以引用它就可以使用。 在下一個請求時,將重新計算@cached_result 如果要在請求之間緩存某些內容,可以使用CacheStore:

class Model
  def something
    Rails.cache.fetch("cache_key") do
      do_query
    end
  end
end

但是不要將緩存視為永久存儲。 但這將允許您在請求之間以及一段時間內緩存某些內容。

順便說一下,將為每個模型實例計算@cached_result。 如果您執行Model.where(field: "value")來返回2個以上的實例,則每個實例都會在第一次調用時執行do_query

暫無
暫無

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

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