модуль ActiveRecord::Integration::ClassMethods
Публичные методы экземпляра
# File activerecord/lib/active_record/integration.rb, line 99
def to_param(method_name = nil)
if method_name.nil?
super()
else
define_method :to_param do
if (default = super()) &&
(result = send(method_name).to_s).present? &&
(param = result.squish.truncate(20, separator: /\s/, omission: nil).parameterize).present?
"#{default}-#{param}"
else
default
end
end
end
end Определяет метод to_param вашей модели для генерации «красивых» URL-адресов, используя method_name, которое может быть любым атрибутом или методом, отвечающим на to_s.
class User < ActiveRecord::Base to_param :name end user = User.find_by(name: 'Fancy Pants') user.id # => 123 user_path(user) # => "/users/123-fancy-pants"
Значения длиннее 20 символов будут усечены. Усечение происходит по словам.
user = User.find_by(name: 'David Heinemeier Hansson') user.id # => 125 user_path(user) # => "/users/125-david"
Поскольку сгенерированный параметр начинается с id записи, он подходит для передачи в find. Например, в контроллере:
params[:id] # => "123-fancy-pants" User.find(params[:id]).id # => 123
Вызывает метод суперкласса
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.