Spec-Zone.ru › Ruby on Rails 5.2

модуль ActiveRecord::Integration

Публичные методы экземпляра

cache_key(*timestamp_names) Показать исходный код
# 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 выключен, как это было в Rails 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

Возвращает ключ кэша вместе с версией.

cache_version() Показать исходный код
# 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 используется столбец updated_at, но этот метод может быть переопределен для возврата чего-то другого.

Обратите внимание, что этот метод вернёт nil, если ActiveRecord::Base.cache_versioning установлен в false (что по умолчанию до Rails 6.0).

to_param() Показать исходный код
# 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, которое Action Pack использует для построения URL для этого объекта. По умолчанию реализация возвращает id этой записи как String, или nil если эта запись не сохранена.

Например, предположим, что у вас есть модель User и у вас есть маршрут resources :users. Обычно user_path построит путь с 'id' объекта пользователя в нём:

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

Вы можете переопределить to_param в своей модели, чтобы user_path строил путь, используя имя пользователя вместо id пользователя:

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

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

© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API