модуль ActiveRecord::Integration
Методы экземпляра открытого доступа
# 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)
# File activerecord/lib/active_record/integration.rb, line 113
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 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
elsif self.class.has_attribute?("updated_at")
raise ActiveModel::MissingAttributeError, "missing attribute: updated_at"
end
end Возвращает версию кэша, которая может быть использована вместе с ключом кэша для формирования схемы рециркулирующего кэширования. По умолчанию, для cache_version используется обновлённое поле updated_at, но этот метод может быть переопределён для возвращения чего-то другого.
Обратите внимание, что этот метод вернёт nil, если ActiveRecord::Base.cache_versioning установлен на false.
# 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 строил путь, используя имя пользователя вместо id пользователя:
class User < ActiveRecord::Base
def to_param # overridden
name
end
end
user = User.find_by(name: 'Phusion')
user_path(user) # => "/users/Phusion"
© 2004–2020 David Heinemeier Hansson
Licensed under the MIT License.