Spec-Zone.ru › Ruby on Rails 5.1

модуль ActiveRecord::Integration

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

cache_key(*timestamp_names) Показать исходный код
# File activerecord/lib/active_record/integration.rb, line 55
def cache_key(*timestamp_names)
  if new_record?
    "#{model_name.cache_key}/new"
  else
    timestamp = if timestamp_names.any?
      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

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

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

Возвращает 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–2018 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

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