module ActiveRecord::Integration::ClassMethods - activerecord-4.2.3 Documentation

# module ActiveRecord::Integration::ClassMethods

### Public Instance Methods

to_param(method_name = nil) click to toggle source

Defines your model's `to_param` method to generate “pretty” URLs using `method_name`, which can be any attribute or method that responds to `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"

Values longer than 20 characters will be truncated. The value is truncated word by word.

    user = User.find_by(name: 'David HeinemeierHansson')
    user.id         # => 125
    user_path(user) # => "/users/125-david"

Because the generated param begins with the record's `id`, it is suitable for passing to `find`. In a controller, for example:

    params[:id]               # => "123-fancy-pants"
    User.find(params[:id]).id # => 123

Calls superclass method

    # File lib/active_record/integration.rb, line 96
    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