модуль ActiveRecord::Integration
Публичные методы экземпляров
# 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)
# 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
Возвращает строку, которую Action Pack использует для построения URL для этого объекта. По умолчанию возвращается id этой записи как строка, или 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–2018 David Heinemeier Hansson
Licensed under the MIT License.