Ruby on Rails 5.2 - ActiveRecord::Integration

मॉड्यूल ActiveRecord :: एकीकरण




ruby

मॉड्यूल ActiveRecord :: एकीकरण

सार्वजनिक प्रवृत्ति के तरीके

cache_key (* टाइमस्टैम्प_नाम) स्रोत दिखाएँ
# File activerecord/lib/active_record/integration.rb, line 64
    def cache_key(*timestamp_names)
      if new_record?
        "#{model_name.cache_key}/new"
      else
        if cache_version && timestamp_names.none?
          "#{model_name.cache_key}/#{id}"
        else
          timestamp = if timestamp_names.any?
            ActiveSupport::Deprecation.warn(<<-MSG.squish)
              Specifying a timestamp name for #cache_key has been deprecated in favor of
              the explicit #cache_version method that can be overwritten.
            MSG

            max_updated_column_timestamp(timestamp_names)
          else
            max_updated_column_timestamp
          end

          if timestamp
            timestamp = timestamp.utc.to_s(cache_timestamp_format)
            "#{model_name.cache_key}/#{id}-#{timestamp}"
          else
            "#{model_name.cache_key}/#{id}"
          end
        end
      end
    end

एक स्थिर कैश कुंजी देता है जिसका उपयोग इस रिकॉर्ड को पहचानने के लिए किया जा सकता है।

Product.new.cache_key     # => "products/new"
Product.find(5).cache_key # => "products/5"

यदि ActiveRecord :: Base.cache_versioning बंद हो जाता है, जैसा कि रेल 5.1 और इससे पहले का है, तो कैश कुंजी में एक संस्करण भी शामिल होगा।

Product.cache_versioning = false
Person.find(5).cache_key  # => "people/5-20071224150000" (updated_at available)
cache_key_with_version () स्रोत दिखाएं
# File activerecord/lib/active_record/integration.rb, line 105
def cache_key_with_version
  if version = cache_version
    "#{cache_key}-#{version}"
  else
    cache_key
  end
end

संस्करण के साथ कैश कुंजी देता है।

# File activerecord/lib/active_record/integration.rb, line 98
def cache_version
  if cache_versioning && timestamp = try(:updated_at)
    timestamp.utc.to_s(:usec)
  end
end

एक कैश संस्करण लौटाता है जिसका उपयोग कैश के साथ मिलकर एक पुनरावर्तनीय कैशिंग योजना के रूप में किया जा सकता है। डिफ़ॉल्ट रूप से, #cache_version के लिए अद्यतित_ट कॉलम का उपयोग किया जाता है, लेकिन इस विधि को कुछ और वापस करने के लिए अधिलेखित किया जा सकता है।

ध्यान दें, यदि ActiveRecord :: Base.cache_versioning false सेट है (जो कि यह रेल 6.0 तक डिफ़ॉल्ट रूप से है) तो यह विधि शून्य हो जाएगी।

# File activerecord/lib/active_record/integration.rb, line 49
def to_param
  # We can't use alias_method here, because method 'id' optimizes itself on the fly.
  id && id.to_s # Be sure to stringify the id for routes
end

एक String देता है, जो एक्शन पैक इस ऑब्जेक्ट के लिए एक URL बनाने के लिए उपयोग करता है। डिफ़ॉल्ट कार्यान्वयन इस रिकॉर्ड की आईडी को String रूप में लौटाता है, या इस रिकॉर्ड के बिना सहेजे जाने पर nil हो जाता है।

उदाहरण के लिए, मान लें कि आपके पास एक उपयोगकर्ता मॉडल है, और आपके पास एक resources :users मार्ग। सामान्यतया, user_path इसमें उपयोगकर्ता ऑब्जेक्ट 'id' के साथ एक पथ का निर्माण करेगा:

user = User.find_by(name: 'Phusion')
user_path(user)  # => "/users/1"

उपयोगकर्ता के आईडी के बजाय उपयोगकर्ता के नाम का उपयोग करके पथ बनाने के लिए आप अपने मॉडल to_param को ओवरराइड कर सकते हैं:

class User < ActiveRecord::Base
  def to_param  # overridden
    name
  end
end

user = User.find_by(name: 'Phusion')
user_path(user)  # => "/users/Phusion"