модуль ActiveRecord::Integration
Публичные методы экземпляров
Возвращает ключ кэша, который может быть использован для идентификации этой записи.
Product.new.cache_key # => "products/new" Product.find(5).cache_key # => "products/5" (updated_at not available) Person.find(5).cache_key # => "people/5-20071224150000" (updated_at available)
Вы также можете передать список именованных временных меток, и самая последняя в списке будет использована для генерации ключа:
Person.find(5).cache_key(:updated_at, :last_reviewed_at)
# File activerecord/lib/active_record/integration.rb, line 55
def cache_key(*timestamp_names)
case
when new_record?
"#{self.class.model_name.cache_key}/new"
when timestamp_names.any?
timestamp = max_updated_column_timestamp(timestamp_names)
timestamp = timestamp.utc.to_s(cache_timestamp_format)
"#{self.class.model_name.cache_key}/#{id}-#{timestamp}"
when timestamp = max_updated_column_timestamp
timestamp = timestamp.utc.to_s(cache_timestamp_format)
"#{self.class.model_name.cache_key}/#{id}-#{timestamp}"
else
"#{self.class.model_name.cache_key}/#{id}"
end
end Возвращает строку, которую Action Pack использует для построения URL-адреса этого объекта. По умолчанию возвращает идентификатор этой записи в виде строки или 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"
# File activerecord/lib/active_record/integration.rb, line 40 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
© 2004–2016 David Heinemeier Hansson
Licensed under the MIT License.