Spec-Zone.ru › Ruby on Rails 4.1

модуль ActiveRecord::Integration

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

cache_key(*timestamp_names) Показать исходный код

Возвращает ключ кэша, который может быть использован для идентификации этой записи.

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
to_param() Показать исходный код

Возвращает строку, которую 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.

Spec-Zone.ru

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