Spec-Zone.ru › Ruby on Rails 6.0

модуль ActiveRecord::Integration

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

cache_key() Показать исходный код
# File activerecord/lib/active_record/integration.rb, line 72
def cache_key
  if new_record?
    "#{model_name.cache_key}/new"
  else
    if cache_version
      "#{model_name.cache_key}/#{id}"
    else
      timestamp = max_updated_column_timestamp

      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
Product.find(5).cache_key  # => "products/5-20071224150000" (updated_at available)
cache_key_with_version() Показать исходный код
# File activerecord/lib/active_record/integration.rb, line 115
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 97
def cache_version
  return unless cache_versioning

  if has_attribute?("updated_at")
    timestamp = updated_at_before_type_cast
    if can_use_fast_cache_version?(timestamp)
      raw_timestamp_to_cache_version(timestamp)
    elsif timestamp = updated_at
      timestamp.utc.to_s(cache_timestamp_format)
    end
  else
    if self.class.has_attribute?("updated_at")
      raise ActiveModel::MissingAttributeError, "missing attribute: updated_at"
    end
  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 57
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 для этого объекта. По умолчанию реализация возвращает идентификатор этой записи как String, или nil если эта запись не сохранена.

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

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

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

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

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

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

Spec-Zone.ru

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