Spec-Zone.ru › Ruby on Rails 7.2

модуль ActiveRecord::Integration::ClassMethods

Общедоступные методы экземпляров

to_param(method_name = nil) Показать исходный код
# File activerecord/lib/active_record/integration.rb, line 147
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.parameterize.truncate(20, separator: /-/, omission: "")).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-heinemeier"

Поскольку сгенерированный параметр начинается с id записи, он подходит для передачи в find. Например, в контроллере:

params[:id]               # => "123-fancy-pants"
User.find(params[:id]).id # => 123
Вызывается метод суперкласса

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

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